<?php
/** Adminer Editor - Compact database editor
* @link https://www.adminer.org/
* @author Jakub Vrana, https://www.vrana.cz/
* @copyright 2009 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 5.4.2
*/namespace
Adminer;const
VERSION="5.4.2";error_reporting(24575);set_error_handler(function($Eb,$Fb){return!!preg_match('~^Undefined (array key|offset|index)~',$Fb);},E_WARNING|E_NOTICE);$Ub=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Ub||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$W){$Gf=filter_input_array(constant("INPUT$W"),FILTER_UNSAFE_RAW);if($Gf)$$W=$Gf;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection($f=null){return($f?:Db::$instance);}function
adminer(){return
Adminer::$instance;}function
driver(){return
Driver::$instance;}function
connect(){$Za=adminer()->credentials();$J=Driver::connect($Za[0],$Za[1],$Za[2]);return(is_object($J)?$J:null);}function
idf_unescape($s){if(!preg_match('~^[`\'"[]~',$s))return$s;$cd=substr($s,-1);return
str_replace($cd.$cd,$cd,substr($s,1,-1));}function
q($P){return
connection()->quote($P);}function
escape_string($W){return
substr(q($W),1,-1);}function
idx($ia,$v,$h=null){return($ia&&array_key_exists($v,$ia)?$ia[$v]:$h);}function
number($W){return
preg_replace('~[^0-9]+~','',$W);}function
number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
remove_slashes(array$Sf,$Ub=false){$J=array();foreach($Sf
as$v=>$W)$J[stripslashes($v)]=(is_array($W)?remove_slashes($W,$Ub):($Ub?$W:stripslashes($W)));return$J;}function
bracket_escape($s,$qa=false){static$xf=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
strtr($s,($qa?array_flip($xf):$xf));}function
min_version($Tf,$ld="",$f=null){$f=connection($f);$Oe=$f->server_info;if($ld&&preg_match('~([\d.]+)-MariaDB~',$Oe,$z)){$Oe=$z[1];$Tf=$ld;}return$Tf&&version_compare($Oe,$Tf)>=0;}function
charset(Db$e){return(min_version("5.5.3",0,$e)?"utf8mb4":"utf8");}function
ini_bool($Ic){$W=ini_get($Ic);return(preg_match('~^(on|true|yes)$~i',$W)||(int)$W);}function
ini_bytes($Ic){$W=ini_get($Ic);switch(strtolower(substr($W,-1))){case'g':$W=(int)$W*1024;case'm':$W=(int)$W*1024;case'k':$W=(int)$W*1024;}return$W;}function
sid(){static$J;if($J===null)$J=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$J;}function
set_password($Y,$N,$U,$F){$_SESSION["pwds"][$Y][$N][$U]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function
get_password(){$J=get_session("pwds");if(is_array($J))$J=($_COOKIE["adminer_key"]?decrypt_string($J[0],$_COOKIE["adminer_key"]):false);return$J;}function
get_val($H,$j=0,$Sa=null){$Sa=connection($Sa);$I=$Sa->query($H);if(!is_object($I))return
false;$K=$I->fetch_row();return($K?$K[$j]:false);}function
get_vals($H,$c=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$c];}return$J;}function
get_key_vals($H,$f=null,$Re=true){$f=connection($f);$J=array();$I=$f->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($Re)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}function
get_rows($H,$f=null,$i="<p class='error'>"){$Sa=connection($f);$J=array();$I=$Sa->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$f&&$i&&(defined('Adminer\PAGE_HEADER')||$i=="-- "))echo$i.error()."\n";return$J;}function
unique_array($K,array$u){foreach($u
as$t){if(preg_match("~PRIMARY|UNIQUE~",$t["type"])&&!$t["partial"]){$J=array();foreach($t["columns"]as$v){if(!isset($K[$v]))continue
2;$J[$v]=$K[$v];}return$J;}}}function
escape_key($v){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$v,$z))return$z[1].idf_escape(idf_unescape($z[2])).$z[3];return
idf_escape($v);}function
where(array$Z,array$k=array()){$J=array();foreach((array)$Z["where"]as$v=>$W){$v=bracket_escape($v,true);$c=escape_key($v);$j=idx($k,$v,array());$Rb=$j["type"];$J[]=$c.(JUSH=="sql"&&$Rb=="json"?" = CAST(".q($W)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^json~',$Rb)?"::jsonb = ".q($W)."::jsonb":(JUSH=="sql"&&is_numeric($W)&&preg_match('~\.~',$W)?" LIKE ".q($W):(JUSH=="mssql"&&strpos($Rb,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$W)):" = ".unconvert_field($j,q($W))))));if(JUSH=="sql"&&preg_match('~char|text~',$Rb)&&preg_match("~[^ -@]~",$W))$J[]="$c = ".q($W)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$v)$J[]=escape_key($v)." IS NULL";return
implode(" AND ",$J);}function
where_check($W,array$k=array()){parse_str($W,$Ea);remove_slashes(array(&$Ea));return
where($Ea,$k);}function
where_link($q,$c,$X,$Qd="="){return"&where%5B$q%5D%5Bcol%5D=".urlencode($c)."&where%5B$q%5D%5Bop%5D=".urlencode(($X!==null?$Qd:"IS NULL"))."&where%5B$q%5D%5Bval%5D=".urlencode($X);}function
convert_fields(array$d,array$k,array$M=array()){$J="";foreach($d
as$v=>$W){if($M&&!in_array(idf_escape($v),$M))continue;$ja=convert_field($k[$v]);if($ja)$J
.=", $ja AS ".idf_escape($v);}return$J;}function
cookie($B,$X,$hd=2592000){header("Set-Cookie: $B=".rawurlencode($X).($hd?"; expires=".gmdate("D, d M Y H:i:s",time()+$hd)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
get_settings($Wa){parse_str($_COOKIE[$Wa],$Se);return$Se;}function
get_setting($v,$Wa="adminer_settings",$h=null){return
idx(get_settings($Wa),$v,$h);}function
save_settings(array$Se,$Wa="adminer_settings"){$X=http_build_query($Se+get_settings($Wa));cookie($Wa,$X);$_COOKIE[$Wa]=$X;}function
restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function
stop_session($Yb=false){$Of=ini_bool("session.use_cookies");if(!$Of||$Yb){session_write_close();if($Of&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($v){return$_SESSION[$v][DRIVER][SERVER][$_GET["username"]];}function
set_session($v,$W){$_SESSION[$v][DRIVER][SERVER][$_GET["username"]]=$W;}function
auth_url($Y,$N,$U,$g=null){$Mf=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($g!==null?"db|":"").($Y=='mssql'||$Y=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$Mf,$z);return"$z[1]?".(sid()?SID."&":"").($Y!="server"||$N!=""?urlencode($Y)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($U).($g!=""?"&db=".urlencode($g):"").($z[2]?"&$z[2]":"");}function
is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
redirect($y,$_=null){if($_!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($y!==null?$y:$_SERVER["REQUEST_URI"]))][]=$_;}if($y!==null){if($y=="")$y=".";header("Location: $y");exit;}}function
query_redirect($H,$y,$_,$ye=true,$Jb=true,$Ob=false,$of=""){if($Jb){$af=microtime(true);$Ob=!connection()->query($H);$of=format_time($af);}$Xe=($H?adminer()->messageQuery($H,$of,$Ob):"");if($Ob){adminer()->error
.=error().$Xe.script("messagesPrint();")."<br>";return
false;}if($ye)redirect($y,$_.$Xe);return
true;}class
Queries{static$queries=array();static$start=0;}function
queries($H){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$H:(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";");return
connection()->query($H);}function
apply_queries($H,array$S,$Gb='Adminer\table'){foreach($S
as$Q){if(!queries("$H ".$Gb($Q)))return
false;}return
true;}function
queries_redirect($y,$_,$ye){$te=implode("\n",Queries::$queries);$of=format_time(Queries::$start);return
query_redirect($te,$y,$_,$ye,false,!$ye,$of);}function
format_time($af){return
sprintf('%.3f s',max(0,microtime(true)-$af));}function
relative_uri(){return
str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function
remove_from_uri($Zd=""){return
substr(preg_replace("~(?<=[?&])($Zd".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function
get_file($v,$hb=false,$kb=""){$Sb=$_FILES[$v];if(!$Sb)return
null;foreach($Sb
as$v=>$W)$Sb[$v]=(array)$W;$J='';foreach($Sb["error"]as$v=>$i){if($i)return$i;$B=$Sb["name"][$v];$uf=$Sb["tmp_name"][$v];$Ua=file_get_contents($hb&&preg_match('~\.gz$~',$B)?"compress.zlib://$uf":$uf);if($hb){$af=substr($Ua,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$af))$Ua=iconv("utf-16","utf-8",$Ua);elseif($af=="\xEF\xBB\xBF")$Ua=substr($Ua,3);}$J
.=$Ua;if($kb)$J
.=(preg_match("($kb\\s*\$)",$Ua)?"":$kb)."\n\n";}return$J;}function
upload_error($i){$sd=($i==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($i?'Unable to upload a file.'.($sd?" ".sprintf('Maximum allowed file size is %sB.',$sd):""):'File does not exist.');}function
repeat_pattern($fe,$fd){return
str_repeat("$fe{0,65535}",$fd/65535)."$fe{0,".($fd%65535)."}";}function
is_utf8($W){return(preg_match('~~u',$W)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$W));}function
format_number($W){return
strtr(number_format($W,0,".",','),preg_split('~~u','0123456789',-1,PREG_SPLIT_NO_EMPTY));}function
friendly_url($W){return
preg_replace('~\W~i','-',$W);}function
table_status1($Q,$Pb=false){$J=table_status($Q,$Pb);return($J?reset($J):array("Name"=>$Q));}function
column_foreign_keys($Q){$J=array();foreach(adminer()->foreignKeys($Q)as$cc){foreach($cc["source"]as$W)$J[$W][]=$cc;}return$J;}function
fields_from_edit(){$J=array();foreach((array)$_POST["field_keys"]as$v=>$W){if($W!=""){$W=bracket_escape($W);$_POST["function"][$W]=$_POST["field_funs"][$v];$_POST["fields"][$W]=$_POST["field_vals"][$v];}}foreach((array)$_POST["fields"]as$v=>$W){$B=bracket_escape($v,true);$J[$B]=array("field"=>$B,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($v==driver()->primary),);}return$J;}function
dump_headers($Bc,$Bd=false){$J=adminer()->dumpHeaders($Bc,$Bd);$Wd=$_POST["output"];if($Wd!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Bc).".$J".($Wd!="file"&&preg_match('~^[0-9a-z]+$~',$Wd)?".$Wd":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function
dump_csv(array$K){$Af=$_POST["format"]=="tsv";foreach($K
as$v=>$W){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Af?'\t':'[,;]|^$').'~',$W))$K[$v]='"'.str_replace('"','""',$W).'"';}echo
implode(($_POST["format"]=="csv"?",":($Af?"\t":";")),$K)."\r\n";}function
apply_sql_function($o,$c){return($o?($o=="unixepoch"?"DATETIME($c, '$o')":($o=="count distinct"?"COUNT(DISTINCT ":strtoupper("$o("))."$c)"):$c);}function
get_temp_dir(){$J=ini_get("upload_tmp_dir");if(!$J){if(function_exists('sys_get_temp_dir'))$J=sys_get_temp_dir();else{$l=@tempnam("","");if(!$l)return'';$J=dirname($l);unlink($l);}}return$J;}function
file_open_lock($l){if(is_link($l))return;$n=@fopen($l,"c+");if(!$n)return;@chmod($l,0660);if(!flock($n,LOCK_EX)){fclose($n);return;}return$n;}function
file_write_unlock($n,$eb){rewind($n);fwrite($n,$eb);ftruncate($n,strlen($eb));file_unlock($n);}function
file_unlock($n){flock($n,LOCK_UN);fclose($n);}function
first(array$ia){return
reset($ia);}function
password_file($Xa){$l=get_temp_dir()."/adminer.key";if(!$Xa&&!file_exists($l))return'';$n=file_open_lock($l);if(!$n)return'';$J=stream_get_contents($n);if(!$J){$J=rand_string();file_write_unlock($n,$J);}else
file_unlock($n);return$J;}function
rand_string(){return
md5(uniqid(strval(mt_rand()),true));}function
select_value($W,$x,array$j,$mf){if(is_array($W)){$J="";if(array_filter($W,'is_array')==array_values($W)){$Xc=array();foreach($W
as$V)$Xc+=array_fill_keys(array_keys($V),null);foreach(array_keys($Xc)as$Wc)$J
.="<th>".h($Wc);foreach($W
as$V){$J
.="<tr>";foreach(array_merge($Xc,$V)as$Qf)$J
.="<td>".select_value($Qf,$x,$j,$mf);}}else{foreach($W
as$Wc=>$V)$J
.="<tr>".($W!=array_values($W)?"<th>".h($Wc):"")."<td>".select_value($V,$x,$j,$mf);}return"<table>$J</table>";}if(!$x)$x=adminer()->selectLink($W,$j);if($x===null){if(is_mail($W))$x="mailto:$W";if(is_url($W))$x=$W;}$J=adminer()->editVal(driver()->value($W,$j),$j);if($J!==null){if(!is_utf8($J))$J="\0";elseif($mf!=""&&is_shortable($j))$J=shorten_utf8($J,max(0,+$mf));else$J=h($J);}return
adminer()->selectVal($J,$x,$j,$W);}function
is_blob(array$j){return
preg_match('~blob|bytea|raw|file~',$j["type"])&&!in_array($j["type"],idx(driver()->structuredTypes(),'User types',array()));}function
is_mail($xb){$ka='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$qb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$fe="$ka+(\\.$ka+)*@($qb?\\.)+$qb";return
is_string($xb)&&preg_match("(^$fe(,\\s*$fe)*\$)i",$xb);}function
is_url($P){$qb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return
preg_match("~^((https?):)?//($qb?\\.)+$qb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function
is_shortable(array$j){return!preg_match('~'.number_type().'|date|time|year~',$j["type"]);}function
host_port($N){return(preg_match('~^(\[(.+)]|([^:]+)):([^:]+)$~',$N,$z)?array($z[2].$z[3],$z[4]):array($N,''));}function
count_rows($Q,array$Z,$Qc,array$p){$H=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($Qc&&(JUSH=="sql"||count($p)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$p).")$H":"SELECT COUNT(*)".($Qc?" FROM (SELECT 1$H GROUP BY ".implode(", ",$p).") x":$H));}function
slow_query($H){$g=adminer()->database();$pf=adminer()->queryTimeout();$Ue=driver()->slowQuery($H,$pf);$f=null;if(!$Ue&&support("kill")){$f=connect();if($f&&($g==""||$f->select_db($g))){$Yc=get_val(connection_id(),0,$f);echo
script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$Yc&token=".get_token()."'); }, 1000 * $pf);");}}ob_flush();flush();$J=@get_key_vals(($Ue?:$H),$f,false);if($f){echo
script("clearTimeout(timeout);");ob_flush();flush();}return$J;}function
get_token(){$we=rand(1,1e6);return($we^$_SESSION["token"]).":$we";}function
verify_token(){list($vf,$we)=explode(":",$_POST["token"]);return($we^$_SESSION["token"])==$vf;}function
lzw_decompress($xa){$ob=256;$ya=8;$Ka=array();$Ce=0;$De=0;for($q=0;$q<strlen($xa);$q++){$Ce=($Ce<<8)+ord($xa[$q]);$De+=8;if($De>=$ya){$De-=$ya;$Ka[]=$Ce>>$De;$Ce&=(1<<$De)-1;$ob++;if($ob>>$ya)$ya++;}}$nb=range("\0","\xFF");$J="";$ag="";foreach($Ka
as$q=>$Ja){$wb=$nb[$Ja];if(!isset($wb))$wb=$ag.$ag[0];$J
.=$wb;if($q)$nb[]=$ag.$wb[0];$ag=$wb;}return$J;}function
script($We,$wf="\n"){return"<script".nonce().">$We</script>$wf";}function
script_src($Nf,$ib=false){return"<script src='".h($Nf)."'".nonce().($ib?" defer":"")."></script>\n";}function
nonce(){return' nonce="'.get_nonce().'"';}function
input_hidden($B,$X=""){return"<input type='hidden' name='".h($B)."' value='".h($X)."'>\n";}function
input_token(){return
input_hidden("token",get_token());}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($B,$X,$Fa,$Zc="",$Od="",$Ia="",$bd=""){$J="<input type='checkbox' name='$B' value='".h($X)."'".($Fa?" checked":"").($bd?" aria-labelledby='$bd'":"").">".($Od?script("qsl('input').onclick = function () { $Od };",""):"");return($Zc!=""||$Ia?"<label".($Ia?" class='$Ia'":"").">$J".h($Zc)."</label>":$J);}function
optionlist($C,$Ke=null,$Pf=false){$J="";foreach($C
as$Wc=>$V){$Sd=array($Wc=>$V);if(is_array($V)){$J
.='<optgroup label="'.h($Wc).'">';$Sd=$V;}foreach($Sd
as$v=>$W)$J
.='<option'.($Pf||is_string($v)?' value="'.h($v).'"':'').($Ke!==null&&($Pf||is_string($v)?(string)$v:$W)===$Ke?' selected':'').'>'.h($W);if(is_array($V))$J
.='</optgroup>';}return$J;}function
html_select($B,array$C,$X="",$Nd="",$bd=""){static$Zc=0;$ad="";if(!$bd&&substr($C[""],0,1)=="("){$Zc++;$bd="label-$Zc";$ad="<option value='' id='$bd'>".h($C[""]);unset($C[""]);}return"<select name='".h($B)."'".($bd?" aria-labelledby='$bd'":"").">".$ad.optionlist($C,$X)."</select>".($Nd?script("qsl('select').onchange = function () { $Nd };",""):"");}function
html_radios($B,array$C,$X="",$Ne=""){$J="";foreach($C
as$v=>$W)$J
.="<label><input type='radio' name='".h($B)."' value='".h($v)."'".($v==$X?" checked":"").">".h($W)."</label>$Ne";return$J;}function
confirm($_="",$Le="qsl('input')"){return
script("$Le.onclick = () => confirm('".($_?js_escape($_):'Are you sure?')."');","");}function
print_fieldset($r,$ed,$Wf=false){echo"<fieldset><legend>","<a href='#fieldset-$r'>$ed</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$r');",""),"</legend>","<div id='fieldset-$r'".($Wf?"":" class='hidden'").">\n";}function
bold($za,$Ia=""){return($za?" class='active $Ia'":($Ia?" class='$Ia'":""));}function
js_escape($P){return
addcslashes($P,"\r\n'\\/");}function
pagination($E,$cb){return" ".($E==$cb?$E+1:'<a href="'.h(remove_from_uri("page").($E?"&page=$E".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($E+1)."</a>");}function
hidden_fields(array$re,array$Dc=array(),$ne=''){$J=false;foreach($re
as$v=>$W){if(!in_array($v,$Dc)){if(is_array($W))hidden_fields($W,array(),$v);else{$J=true;echo
input_hidden(($ne?$ne."[$v]":$v),$W);}}}return$J;}function
hidden_fields_get(){echo(sid()?input_hidden(session_name(),session_id()):''),(SERVER!==null?input_hidden(DRIVER,SERVER):""),input_hidden("username",$_GET["username"]);}function
file_input($Kc){$pd="max_file_uploads";$qd=ini_get($pd);$Kf="upload_max_filesize";$Lf=ini_get($Kf);return(ini_bool("file_uploads")?$Kc.script("qsl('input[type=\"file\"]').onchange = partialArg(fileChange, "."$qd, '".sprintf('Increase %s.',"$pd = $qd")."', ".ini_bytes("upload_max_filesize").", '".sprintf('Increase %s.',"$Kf = $Lf")."')"):'File uploads are disabled.');}function
enum_input($T,$b,array$j,$X,$_b=""){preg_match_all("~'((?:[^']|'')*)'~",$j["length"],$nd);$ne=($j["type"]=="enum"?"val-":"");$Fa=(is_array($X)?in_array("null",$X):$X===null);$J=($j["null"]&&$ne?"<label><input type='$T'$b value='null'".($Fa?" checked":"")."><i>$_b</i></label>":"");foreach($nd[1]as$W){$W=stripcslashes(str_replace("''","'",$W));$Fa=(is_array($X)?in_array($ne.$W,$X):$X===$W);$J
.=" <label><input type='$T'$b value='".h($ne.$W)."'".($Fa?' checked':'').'>'.h(adminer()->editVal($W,$j)).'</label>';}return$J;}function
input(array$j,$X,$o,$pa=false){$B=h(bracket_escape($j["field"]));echo"<td class='function'>";if(is_array($X)&&!$o)$o="json";$Uc=($o=="json"||preg_match('~^jsonb?$~',$j["type"]));if($Uc&&$X!=''&&(JUSH!="pgsql"||$j["type"]!="json"))$X=json_encode(is_array($X)?$X:json_decode($X),128|64|256);$Be=(JUSH=="mssql"&&$j["auto_increment"]);if($Be&&!$_POST["save"])$o=null;$hc=(isset($_GET["select"])||$Be?array("orig"=>'original'):array())+adminer()->editFunctions($j);$Cb=driver()->enumLength($j);if($Cb){$j["type"]="enum";$j["length"]=$Cb;}$b=" name='fields[$B]".($j["type"]=="enum"||$j["type"]=="set"?"[]":"")."'".($pa?" autofocus":"");echo
driver()->unconvertFunction($j)." ";$Q=$_GET["edit"]?:$_GET["select"];if($j["type"]=="enum")echo
h($hc[""])."<td>".adminer()->editInput($Q,$j,$b,$X);else{$qc=(in_array($o,$hc)||isset($hc[$o]));echo(count($hc)>1?"<select name='function[$B]'>".optionlist($hc,$o===null||$qc?$o:"")."</select>".on_help("event.target.value.replace(/^SQL\$/, '')",1).script("qsl('select').onchange = functionChange;",""):h(reset($hc))).'<td>';$Kc=adminer()->editInput($Q,$j,$b,$X);if($Kc!="")echo$Kc;elseif(preg_match('~bool~',$j["type"]))echo"<input type='hidden'$b value='0'>"."<input type='checkbox'".(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?" checked='checked'":"")."$b value='1'>";elseif($j["type"]=="set")echo
enum_input("checkbox",$b,$j,(is_string($X)?explode(",",$X):$X));elseif(is_blob($j)&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$B'>";elseif($Uc)echo"<textarea$b cols='50' rows='12' class='jush-js'>".h($X).'</textarea>';elseif(($lf=preg_match('~text|lob|memo~i',$j["type"]))||preg_match("~\n~",$X)){if($lf&&JUSH!="sqlite")$b
.=" cols='50' rows='12'";else{$L=min(12,substr_count($X,"\n")+1);$b
.=" cols='30' rows='$L'";}echo"<textarea$b>".h($X).'</textarea>';}else{$Bf=driver()->types();$ud=(!preg_match('~int~',$j["type"])&&preg_match('~^(\d+)(,(\d+))?$~',$j["length"],$z)?((preg_match("~binary~",$j["type"])?2:1)*$z[1]+($z[3]?1:0)+($z[2]&&!$j["unsigned"]?1:0)):($Bf[$j["type"]]?$Bf[$j["type"]]+($j["unsigned"]?0:1):0));if(JUSH=='sql'&&min_version(5.6)&&preg_match('~time~',$j["type"]))$ud+=7;echo"<input".((!$qc||$o==="")&&preg_match('~(?<!o)int(?!er)~',$j["type"])&&!preg_match('~\[\]~',$j["full_type"])?" type='number'":"")." value='".h($X)."'".($ud?" data-maxlength='$ud'":"").(preg_match('~char|binary~',$j["type"])&&$ud>20?" size='".($ud>99?60:40)."'":"")."$b>";}echo
adminer()->editHint($Q,$j,$X);$Vb=0;foreach($hc
as$v=>$W){if($v===""||!$W)break;$Vb++;}if($Vb&&count($hc)>1)echo
script("qsl('td').oninput = partial(skipOriginal, $Vb);");}}function
process_input(array$j){$s=bracket_escape($j["field"]);$o=idx($_POST["function"],$s);$X=idx($_POST["fields"],$s);if($X===null)return
false;if($j["type"]=="enum"||driver()->enumLength($j)){$X=idx($X,0);if($X=="orig"||!$X)return
false;if($X=="null")return"NULL";$X=substr($X,4);}if($j["auto_increment"]&&$X=="")return
null;if($o=="orig")return(preg_match('~^CURRENT_TIMESTAMP~i',$j["on_update"])?idf_escape($j["field"]):false);if($o=="NULL")return"NULL";if($j["type"]=="set")$X=implode(",",(array)$X);if($o=="json"){$o="";$X=json_decode($X,true);if(!is_array($X))return
false;return$X;}if(is_blob($j)&&ini_bool("file_uploads")){$Sb=get_file("fields-$s");if(!is_string($Sb))return
false;return
driver()->quoteBinary($Sb);}return
adminer()->processInput($j,$X,$o);}function
search_tables(){$_GET["where"][0]["val"]=$_POST["query"];$Me="<ul>\n";foreach(table_status('',true)as$Q=>$R){$B=adminer()->tableName($R);if(isset($R["Engine"])&&$B!=""&&(!$_POST["tables"]||in_array($Q,$_POST["tables"]))){$I=connection()->query("SELECT".limit("1 FROM ".table($Q)," WHERE ".implode(" AND ",adminer()->selectSearchProcess(fields($Q),array())),1));if(!$I||$I->fetch_row()){$pe="<a href='".h(ME."select=".urlencode($Q)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$B</a>";echo"$Me<li>".($I?$pe:"<p class='error'>$pe: ".error())."\n";$Me="";}}}echo($Me?"<p class='message'>".'No tables.':"</ul>")."\n";}function
on_help($Pa,$Te=0){return
script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $Pa, $Te) }, onmouseout: helpMouseout});","");}function
edit_form($Q,array$k,$K,$Jf,$i=''){$jf=adminer()->tableName(table_status1($Q,true));page_header(($Jf?'Edit':'Insert'),$i,array("select"=>array($Q,$jf)),$jf);adminer()->editRowPrint($Q,$k,$K,$Jf);if($K===false){echo"<p class='error'>".'No rows.'."\n";return;}echo"<form action='' method='post' enctype='multipart/form-data' id='form'>\n";$vb=false;if(!$k)echo"<p class='error'>".'You have no privileges to update this table.'."\n";else{echo"<table class='layout'>".script("qsl('table').onkeydown = editingKeydown;");$pa=!$_POST;foreach($k
as$B=>$j){echo"<tr><th>".adminer()->fieldName($j);$h=idx($_GET["set"],bracket_escape($B));if($h===null){$h=$j["default"];if($j["type"]=="bit"&&preg_match("~^b'([01]*)'\$~",$h,$_e))$h=$_e[1];if(JUSH=="sql"&&preg_match('~binary~',$j["type"]))$h=bin2hex($h);}$X=($K!==null?($K[$B]!=""&&JUSH=="sql"&&preg_match("~enum|set~",$j["type"])&&is_array($K[$B])?implode(",",$K[$B]):(is_bool($K[$B])?+$K[$B]:$K[$B])):(!$Jf&&$j["auto_increment"]?"":(isset($_GET["select"])?false:$h)));if(!$_POST["save"]&&is_string($X))$X=adminer()->editVal($X,$j);if(($Jf&&!isset($j["privileges"]["update"]))||$j["generated"])echo"<td class='function'><td>".select_value($X,'',$j,null);else{$vb=true;$o=($_POST["save"]?idx($_POST["function"],$B,""):($Jf&&preg_match('~^CURRENT_TIMESTAMP~i',$j["on_update"])?"now":($X===false?null:($X!==null?'':'NULL'))));if(!$_POST&&!$Jf&&$X==$j["default"]&&preg_match('~^[\w.]+\(~',$X))$o="SQL";if(preg_match("~time~",$j["type"])&&preg_match('~^CURRENT_TIMESTAMP~i',$X)){$X="";$o="now";}if($j["type"]=="uuid"&&$X=="uuid()"){$X="";$o="uuid";}if($pa!==false)$pa=($j["auto_increment"]||$o=="now"||$o=="uuid"?null:true);input($j,$X,$o,$pa);if($pa)$pa=false;}echo"\n";}if(!support("table")&&!fields($Q))echo"<tr>"."<th><input name='field_keys[]'>".script("qsl('input').oninput = fieldChange;")."<td class='function'>".html_select("field_funs[]",adminer()->editFunctions(array("null"=>isset($_GET["select"]))))."<td><input name='field_vals[]'>"."\n";echo"</table>\n";}echo"<p>\n";if($vb){echo"<input type='submit' value='".'Save'."'>\n";if(!isset($_GET["select"]))echo"<input type='submit' name='insert' value='".($Jf?'Save and continue edit':'Save and insert next')."' title='Ctrl+Shift+Enter'>\n",($Jf?script("qsl('input').onclick = function () { return !ajaxForm(this.form, '".'Saving'."…', this); };"):"");}echo($Jf?"<input type='submit' name='delete' value='".'Delete'."'>".confirm()."\n":"");if(isset($_GET["select"]))hidden_fields(array("check"=>(array)$_POST["check"],"clone"=>$_POST["clone"],"all"=>$_POST["all"]));echo
input_hidden("referer",(isset($_POST["referer"])?$_POST["referer"]:$_SERVER["HTTP_REFERER"])),input_hidden("save",1),input_token(),"</form>\n";}function
shorten_utf8($P,$fd=80,$ff=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$fd).")($)?)u",$P,$z))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$fd).")($)?)",$P,$z);return
h($z[1]).$ff.(isset($z[2])?"":"<i>…</i>");}function
icon($Ac,$B,$_c,$qf){return"<button type='submit' name='$B' title='".h($qf)."' class='icon icon-$Ac'><span>$_c</span></button>";}if(isset($_GET["file"])){if(substr(VERSION,-4)!='-dev'){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");}@ini_set("zlib.output_compression",'1');if($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo
lzw_decompress("h:Mhgб\"PimcQCa	2ód<fa:;NBqR;1Lf9u7&)l;3J/CQXr2Mai0)e:LuÝh-923li7mZw4њ<-̴!U,Févt2S,a҇FVXaNq)-ǜh:n59Y;j-_9krٓ;.tTqo0{y\rHnGSZh;i^uxWΒC@k=b/A0+(l\\x:\rb8\00!\0F\nB͎(3\r\\Ȅa'I|(i\n\r4Og@4C@@!QB	°c¯q,\r1Eh&2PZiGH9G\"v4rDR\npJ-A|/.cDu:,=R]U5mVkLLQ@-\\@9%SrMPDIa\r(YY\\@Xp:plLC O,\r2]7?m06pTaҥC;_˗yȴd>bnnܣ3X8\r[ˀ-)i>V[Yy&L3#X|	X\\ù`C#H22.#Z`<sÒ\0uh־M_\niZeO/CӒ_`31>=k3R/;/d\0ڵm7/AXq.sL :\$Fw8߾~Hj\"Գ7gSFLίQ_O'W]c=51X~7;i\r*\nJS1ZctAV86fdy;Y]zIpc3Y]}@\$.+1'>ZcpdGL#k8PzYAuv]s9_Aq:\nKhB;XbAHq,CI`jS[ˌ1Vr;pB)#鐉;4H/*<3L;lf\ns\$K`}Ք7jx`d%j]4YHbYJ`GG.KfI)2MfָXRC̱V,~g\0g6:[j1H:AlIqu3\"q|8<9s'Q]J|\0`pjfObq\$1J>RH(ǔq\n#r@e(yVJ0Q҈6P[C:G伞4^PZ\\(\n)~9R%Sj{70_s	z|8H	\"@#9DVL\$H5WJ@zaJ ^	)2\nQv]ՇQp.˵&h2dM1#[[kf,ոΆWq'fLkgn6G;eהECVY{\0D5Rx\"h\"ݟ7W,ňuc31Cxp<If]ѱ^{/H&sρi9\$֒b0َIK\0]IDG}EDVNýmQ31KT3zq|#!\"	҃k/phy-.! 0dmK~au0>\$:\$VMf٨k6:3L@d1zlg֩iX97<׭#a}s\0\\mZXQ'n.9KC9?lXq깗\$M2FqЎKB:bo#KXnMzȤ\r=fm%fi.q;-7x(@#9F)/M-6.V^*g\n!\$(7GxwDWba{1-ԐGw\r9њ (:'%?0Ά)tjHV8}f\$f^wlKl=1ZZEigֺ1Xثbe&,2rk>޲O{-A]mMDȁ>G;ЗgQo:0.7lLשl|:nD탉-K*NY3x.dt>Ў)\$\$9BeeRGwir[62Ǳ9Xk0̱5^PO>C `XOk7\0Klx;48L\$09*9 hNF>\0rPQo<	\\Fd'L:b.4,29@Hnb- #2`Z.L\rPP\"^.Fh\0\r\0\n`	@ 	no	@@\n0 	\0j@q@	1	 \r\0` V`B\n`\n@fh\0` \n@	F`p1\r\0\\&B|`@NI#ApH\rp	`P	11% -\r6\n2	H*@	`\n  	l`z,\rɠ\r\"lh\0(d226\0]#L^\\%\0\\}\$HC\n<}E%IB>͈I\$r6dfhr</FbxYE'2boj\"m(@r*خ~d\$2U2a#`\\A貶r+Ruh\\'+؉\"G!.nMrW*#+%.h\$cCDƊ-#bO`Pv^W@tS-0-|ܶ)g'hF<\rj*\$4'\rH[ɪ1-Fh:,/ɾJ^ODٍj'\rT-&[DĪ(5E B\"`es\n9\r`h\rV%!MZlP^:o>֯XC):meC/\n8I2\rp2&)oC5m0iuAB3fDS61҈C2/Ҩ\ru14GGؔb쒑=KA3>4*\0TI%?r@!3S8,+?.1%6=\0s쭖XnRB@si(O(lKKu%+P65!.O0{Sj.`ȡiz%");}elseif($_GET["file"]=="dark.css"){header("Content-Type: text/css; charset=utf-8");echo
lzw_decompress("h:Mhgh0LЁd91S!	F!\"-6NbdGg:;Nr)c7\r(Hb81s9k\rc)m8OVAc1c34Of*-P1r416d2ցo#3Bf#	g9Φ،fc\rIb6EC&,bum7aVs#m!hrv\\3\rL:SAdk5naF3e6fSyr!L-K,3L@J˲*J쵣	bc99@H8\\6>`Ŏ;A<T'p&qqE4\rlh<5#pR #I%fBIܲ>ʫ29<Cj27j8jc(n?(a\0@5*3:δ60-AlLP4@ɰ\$H4n311t0͙9WO!rH9Q96F<7\r-xC\n @:\$iضm4Kid{\n6\rxhˋ#^'4V@a<#h0S-c9+pa2cyhBO\$9wiXɔVY9*rHtm	@b|@/l\$z+%p2l.7;&{mXC<l96x9m7R0\\4P)AoxqO#f[;6~P\raTGT0uޟ\n3\\ \\ʎJudCGPZ>d8ҨC?VdLL.(ti>,L");}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress("':̢i11	4Q6a&:OAIe:NFD|!Cym2\"r<̱/C#:DbqSeJ˦Cܺ\n\nǱS\rZH\$RAܞS+XKvtdg:6EvXŞjmҩej2MB&ʮLC3Q0L-x\nDyNaPn:s͐(cL/(5{Qy4g-i4ڃf(bUko7&ä*ACb`.\r\nCh<\r)`إ`7CʒZX<Q1X@0dp9EQfF\r!(h)\np'#ČH(i*r&<#7K~# A:N6l,\rJP3!@2>CrhN](a0M326UE2'!<#3R<XCH7#n+a\$!2P0.wdr:YE!]<j@\\pl_\rZғTͩZs3\"~9j>WeQ:X/\"\$8X硉@4H:tL܌j~#8_Ax\$x{LEJ4'00<8>c(zX^5Dt;#K_v꩕u1\n`jn'\"Ir7U*!Ynjk@Ì+5)̄3CZB2HV`qæk]<{\r9|gr\\襜:B2781͍d=HLU}^NߔC*/|􊾓V`)8z:Rb8WA:\$2\r/BE~8iYtzX6ǰICQ7 3)6\00N\r갦 \r0ѯ 9~'%Dw'cdi'ta&r11?\\CmSɞ\$ж o&R,!.AHG\"tPv-&	30.	裃!iĕkJ7	:sO\0^'7^(`B(0nL9(\0\n[Uec)Fʛq2R5\r܀e}ܱh.iZ:AYED2@s1d<)H`تI1I\rZGRϔ/\$Oc\"*p'7`]@\\4BXzgABTQ3wc-sr_:բS@2 #Ė\nuP!Te6TaM)\0v(sVAZS<av(A%#&: `C)\r]MIC'/	PHXb\r\nYMzJFJP?JdBllDCS+-r1<w]v!)IKP4EslkV-kj,c,fRdC!&n0RJ2[3x3TB-Glls`hsV)W4SvC:nd-x` ®\$AP-kr^sASV?3E2X,KtSAq7\n^+%skG<aw	DdYڇQgbn\0A{濡9ùl.Hg(0TJ\$h-Bzm\nWY`!lc\0ϪÄՆMLxyk*Z3EU L-~?ii4[ iDZP)hZ\n5\"1tŦd/BrJcN[FժxK߭nDQS?Q\rL'!\nͅII%2萵Q;ǘ8mX-zIFF]t.H	r/[!#\r{̫pH\n4&3r*L臜{Ae\0L(*{kؘDJ_C:U2\0I0,\n;|xef0`1N`6>C){)3(t8dèO_DT^`H:c\0f<Y`f\\&x \nd+5U݇Oz{n-iFYb7vo%)Xh '7UIVwSR}dK_4 Wjnτ\0l\r\0.p@\0@Ȅ[PZIXكcbqtg2 \\i9< Z@i,`^N'uGBr'&\$F(/җ*uɄYiO	`ʑn:paPhnrM	\0кML,\$Nw)\0*l7GrlrQ	Os\"46 bXbӄoXbbeg\r `BВRhJ\"g\rTcj>I-zGolvu\rz\r	D9BK\r^\rY@,BЖL`^#\rwHpDJMXQ&lg&I\01 	P5&n0?gTs٠O!)`v X ͐QЂ\r y!'v.\r	fK! {#*/ඡ\0H\0r(Ȉ`SpcmI)8.s#G\"`Ƈx'ŔE)Qo)&\\VRZ@2bʒf'dZ&,U\r\"*4! \rD'G\\VHi1Rpc\$L2\nbToB8Fk\\\rB\r\0-l\n1354\04SHM4Qr2O%6p5/O5:pL5)Pľ%E361\r4I:S\"LeGs\\Q627=C	,	&D)<;\\~2ˮr076.'?52K6sa6R23SVLM@Fr9pț3j@NSӂk:@)B\0N`!e\n'PX\\YqLV&r+c.]锏h2]4 z`q8c6q4 ӓPg>#.)7Ne\$nB`\" 4L~΂\nu.OBN@R&N(uN@:h\n]6*hPXΠ@,P3S6U:鮟H5L-6T6SC0FsRRB~r:TnA/OP2-H:1e]P-'''8;8WUbYe!\r ^)Ȗp]	j.`</\"Uw3ʸb brA`fF_u^McTB	_Se65`\ra)ec]cAa_oa2>B\$@Q<OHJtx\"gZ\$nW@	D#S\0002#VΕB;N1NKPnv1wEl*YnB4IqZ`z\0\rR'\"픚iO	ps|)=fs1s72i-Gf `P%H\nhI\re\0X'\"\$z͉Yex@|~k yse`\$ZRz \\Wx[v`{\"Rwn'to#r*\0D3~^@xB~Ħ@}BUCx| YPXN`	\n\0Rmz+X:qy*X(No^8[fG\$LZ[vr#Xυe׍\$':\0[\nr\0Z}	b\$S|BcrQH)xРNDeMb ewzXswxAd苂LYC`{}q}Ό  4j4bFO7MN.'WS/uL	|\")IՁU%VUՌ^q'K4=c\"PvV7HI!\n`	㛓firH	tXn\$wFHĂP@rBa@W9`~bu>wbw3M~zw\$J<@\r&IX<_,[,eDuWL%\06\r?bLeKe*l;cXkY\0BL@\n@o\0h%lx=RB's2tpDϧ\"Z=\rBcQ2vBr4lv ^g(% \$\rvС\nP\\~U.R%ٯvГzx_e{3!e,{ewco|0EW!8wѶuitNef:\r(DV@\n{}cAâ׃|*!X¶\r\$LL/ELlU-/WƬc\$l\nUTPNŵt羣SY<,44.s	kv۠R+bdFN!rgs\$?BB2?P\$dtU`U\rāT\"搖EJ@oUx:<3SSIxGzD(7~M|Q~b5+Irzv@wf6#E\"-	(җhS*7\$QlvB%+]2Ohˢrod\rw'!C`biH8ώ(\0 @DdB>,4qHү츠Hbd\0`]e\"b w6;I?uMNj\rbS_!޷wdK\\O}{=ttZ\0DxaN 3Re#w^NPzU=!zLy͸@˸c]l٬[p՞XMspq5*W4Xs^\"@r~|>B5g2	N\$gFu\rzTjB2Anyc^vҸv\nOv:v}\0P[A%3@@Ǌ=cXGy)~u>zĜQXW\"wEwt;mJnfa@Oo;O hVVc^\06,#2s*y2{tXo;lث\n\nZc?`(%4\$&GrT!AݡCmj0ԀC\0D[H/{!Ak!N:5q\0MKC.B7/ @`Ip;PGr`+D<C]ǆ+<,%Hl`09-GsV]J\nu^Vi5/	6\r%T肊:\n!@ nS\"&)mt1f%RVXJtX%@=bU\$`z@X2dD^Pqő4p@\\,B~6??2OP6\0U0@	XKpf6 RR,e8񶁄Z\nk.BfB:7]\"I6JU\$Mpa:4_gpǐ/0@K;pÅTI<AD =!C\nj	忉S<e-a?XRA]@r4ӢӁOD%9n9x'O4-ZtpFK&1f^biB\rPKƢ)%'*Age\r.o@,`BQ7D\$o	*|Z)ҍE9`BC\n0/qبv#?ʽSt3oGmSlFo)?Y#F9SdfGסESyw#>w9籷9xRn8y.).P,+{dtH:!&;	b߈8k-<G4)%ZP֑p~[@.D텸~	(cGˢŨ8Xђ'ڎH=,\noɤBI/!Rt\nvU%DZlRhG*Lp:.V6\"8 Blr\0*<\"3,Ď|R-TGhfLXBtt\0");}elseif($_GET["file"]=="jush.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress('');}elseif($_GET["file"]=="logo.png"){header("Content-Type: image/png");echo"PNG\r\n\n\0\0\0\rIHDR\0\0\09\0\0\09\0\0\0~6\0\0\0000PLTE\0\0\0+NvYtssuIJ/.C\0\0\0tRNS\0@f\0\0\0	pHYs\0\0\0\0\0\0\0IDAT8ՔN@El϶p6G.\$=>	w5r}z7>P#\$Kj7ݶ?4mt&~3!00^Af0\",*4oEX(*Y	6	PcOW܊mr0~/L\rXj#mjC]Gm\0}ߑuA9X\n8VY+D#iqnKQ8J1Q6Y0`PbQ\\h~>:pSɀGEQ=I{*327\neLB~/R(\$) HQni6J	<-.wɪjVmm?SHvƩ\0^q)]U92,;Ǎ'p!X˃LD.tæ/wR	wdr2Ƥ4[=E5S+c\0\0\0\0IENDB`";}exit;}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"];define('Adminer\HTTPS',($_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off"))||ini_bool("session.cookie_secure"));@ini_set("session.use_trans_sid",'0');if(!defined("SID")){session_cache_limiter("");session_name("adminer_sid");session_set_cookie_params(0,preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),"",HTTPS,true);session_start();}if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){$_GET=remove_slashes($_GET,$Ub);$_POST=remove_slashes($_POST,$Ub);$_COOKIE=remove_slashes($_COOKIE,$Ub);}if(function_exists("get_magic_quotes_runtime")&&get_magic_quotes_runtime())set_magic_quotes_runtime(false);@set_time_limit(0);@ini_set("precision",'15');function
lang($s,$Jd=null){$ha=func_get_args();$ha[0]=$s;return
call_user_func_array('Adminer\lang_format',$ha);}function
lang_format($yf,$Jd=null){if(is_array($yf)){$ke=($Jd==1?0:1);$yf=$yf[$ke];}$yf=str_replace("'",'’',$yf);$ha=func_get_args();array_shift($ha);$ec=str_replace("%d","%s",$yf);if($ec!=$yf)$ha[0]=format_number($Jd);return
vsprintf($ec,$ha);}define('Adminer\LANG','en');abstract
class
SqlDb{static$instance;var$extension;var$flavor='';var$server_info;var$affected_rows=0;var$info='';var$errno=0;var$error='';protected$multi;abstract
function
attach($N,$U,$F);abstract
function
quote($P);abstract
function
select_db($fb);abstract
function
query($H,$Cf=false);function
multi_query($H){return$this->multi=$this->query($H);}function
store_result(){return$this->multi;}function
next_result(){return
false;}}if(extension_loaded('pdo')){abstract
class
PdoDb
extends
SqlDb{protected$pdo;function
dsn($sb,$U,$F,array$C=array()){$C[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$C[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
\PDO($sb,$U,$F,$C);}catch(\Exception$Hb){return$Hb->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
quote($P){return$this->pdo->quote($P);}function
query($H,$Cf=false){$I=$this->pdo->query($H);$this->error="";if(!$I){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error='Unknown error.';return
false;}$this->store_result($I);return$I;}function
store_result($I=null){if(!$I){$I=$this->multi;if(!$I)return
false;}if($I->columnCount()){$I->num_rows=$I->rowCount();return$I;}$this->affected_rows=$I->rowCount();return
true;}function
next_result(){$I=$this->multi;if(!is_object($I))return
false;$I->_offset=0;return@$I->nextRowset();}}class
PdoResult
extends
\PDOStatement{var$_offset=0,$num_rows;function
fetch_assoc(){return$this->fetch_array(\PDO::FETCH_ASSOC);}function
fetch_row(){return$this->fetch_array(\PDO::FETCH_NUM);}private
function
fetch_array($_d){$J=$this->fetch($_d);return($J?array_map(array($this,'unresource'),$J):$J);}private
function
unresource($W){return(is_resource($W)?stream_get_contents($W):$W);}function
fetch_field(){$K=(object)$this->getColumnMeta($this->_offset++);$T=$K->pdo_type;$K->type=($T==\PDO::PARAM_INT?0:15);$K->charsetnr=($T==\PDO::PARAM_LOB||(isset($K->flags)&&in_array("blob",(array)$K->flags))?63:0);return$K;}function
seek($Kd){for($q=0;$q<$Kd;$q++)$this->fetch();}}}function
add_driver($r,$B){SqlDriver::$drivers[$r]=$B;}function
get_driver($r){return
SqlDriver::$drivers[$r];}abstract
class
SqlDriver{static$instance;static$drivers=array();static$extensions=array();static$jush;protected$conn;protected$types=array();var$delimiter=";";var$insertFunctions=array();var$editFunctions=array();var$unsigned=array();var$operators=array();var$functions=array();var$grouping=array();var$onActions="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";var$partitionBy=array();var$inout="IN|OUT|INOUT";var$enumLength="'(?:''|[^'\\\\]|\\\\.)*'";var$generated=array();static
function
connect($N,$U,$F){$e=new
Db;return($e->attach($N,$U,$F)?:$e);}function
__construct(Db$e){$this->conn=$e;}function
types(){return
call_user_func_array('array_merge',array_values($this->types));}function
structuredTypes(){return
array_map('array_keys',$this->types);}function
enumLength(array$j){}function
unconvertFunction(array$j){}function
select($Q,array$M,array$Z,array$p,array$D=array(),$w=1,$E=0,$pe=false){$Qc=(count($p)<count($M));$H=adminer()->selectQueryBuild($M,$Z,$p,$D,$w,$E);if(!$H)$H="SELECT".limit(($_GET["page"]!="last"&&$w&&$p&&$Qc&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$M)."\nFROM ".table($Q),($Z?"\nWHERE ".implode(" AND ",$Z):"").($p&&$Qc?"\nGROUP BY ".implode(", ",$p):"").($D?"\nORDER BY ".implode(", ",$D):""),$w,($E?$w*$E:0),"\n");$af=microtime(true);$J=$this->conn->query($H);if($pe)echo
adminer()->selectQuery($H,$af,!$J);return$J;}function
delete($Q,$ue,$w=0){$H="FROM ".table($Q);return
queries("DELETE".($w?limit1($Q,$H,$ue):" $H$ue"));}function
update($Q,array$O,$ue,$w=0,$Ne="\n"){$Sf=array();foreach($O
as$v=>$W)$Sf[]="$v = $W";$H=table($Q)." SET$Ne".implode(",$Ne",$Sf);return
queries("UPDATE".($w?limit1($Q,$H,$ue,$Ne):" $H$ue"));}function
insert($Q,array$O){return
queries("INSERT INTO ".table($Q).($O?" (".implode(", ",array_keys($O)).")\nVALUES (".implode(", ",$O).")":" DEFAULT VALUES").$this->insertReturning($Q));}function
insertReturning($Q){return"";}function
insertUpdate($Q,array$L,array$oe){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($H,$pf){}function
convertSearch($s,array$W,array$j){return$s;}function
value($W,array$j){return(method_exists($this->conn,'value')?$this->conn->value($W,$j):$W);}function
quoteBinary($Fe){return
q($Fe);}function
warnings(){}function
tableHelp($B,$Tc=false){}function
inheritsFrom($Q){return
array();}function
inheritedTables($Q){return
array();}function
partitionsInfo($Q){return
array();}function
hasCStyleEscapes(){return
false;}function
engines(){return
array();}function
supportsIndex(array$R){return!is_view($R);}function
indexAlgorithms(array$if){return
array();}function
checkConstraints($Q){return
get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME".($this->conn->flavor=='maria'?" AND c.TABLE_NAME = t.TABLE_NAME":"")."
WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
AND t.TABLE_NAME = ".q($Q).(JUSH=="pgsql"?"
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'":""),$this->conn);}function
allFields(){$J=array();if(DB!=""){foreach(get_rows("SELECT TABLE_NAME AS tab, COLUMN_NAME AS field, IS_NULLABLE AS nullable, DATA_TYPE AS type, CHARACTER_MAXIMUM_LENGTH AS length".(JUSH=='sql'?", COLUMN_KEY = 'PRI' AS `primary`":"")."
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
ORDER BY TABLE_NAME, ORDINAL_POSITION",$this->conn)as$K){$K["null"]=($K["nullable"]=="YES");$J[$K["tab"]][]=$K;}}return$J;}}class
Adminer{static$instance;var$error='';private$values=array();function
name(){return"<a href='https://www.adminer.org/editor/'".target_blank()." id='h1'><img src='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.2")."' width='24' height='24' alt='' id='logo'>".'Editor'."</a>";}function
credentials(){return
array(SERVER,$_GET["username"],get_password());}function
connectSsl(){}function
permanentLogin($Xa=false){return
password_file($Xa);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($N){}function
database(){if(connection()){$gb=adminer()->databases(false);return(!$gb?get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)"):$gb[(information_schema($gb[0])?1:0)]);}}function
operators(){return
array("<=",">=");}function
schemas(){return
schemas();}function
databases($Xb=true){return
get_databases($Xb);}function
pluginsLinks(){}function
queryTimeout(){return
5;}function
afterConnect(){}function
headers(){}function
csp($ab){return$ab;}function
head($db=null){return
true;}function
bodyClass(){echo" editor";}function
css(){$J=array();foreach(array("","-dark")as$_d){$l="adminer$_d.css";if(file_exists($l)){$Sb=file_get_contents($l);$J["$l?v=".crc32($Sb)]=($_d?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$Sb)?'':'light'));}}return$J;}function
loginForm(){echo"<table class='layout'>\n",adminer()->loginFormField('username','<tr><th>'.'Username'.'<td>',input_hidden("auth[driver]","server").'<input name="auth[username]" autofocus value="'.h($_GET["username"]).'" autocomplete="username" autocapitalize="off">'),adminer()->loginFormField('password','<tr><th>'.'Password'.'<td>','<input type="password" name="auth[password]" autocomplete="current-password">'),"</table>\n","<p><input type='submit' value='".'Login'."'>\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],'Permanent login')."\n";}function
loginFormField($B,$uc,$X){return$uc.$X."\n";}function
login($id,$F){return
true;}function
tableName($if){return
h(isset($if["Engine"])?($if["Comment"]!=""?$if["Comment"]:$if["Name"]):"");}function
fieldName($j,$D=0){return
h(preg_replace('~\s+\[.*\]$~','',($j["comment"]!=""?$j["comment"]:$j["field"])));}function
selectLinks($if,$O=""){$a=$if["Name"];if($O!==null)echo'<p class="tabs"><a href="'.h(ME.'edit='.urlencode($a).$O).'">'.'New item'."</a>\n";}function
foreignKeys($Q){return
foreign_keys($Q);}function
backwardKeys($Q,$hf){$J=array();foreach(get_rows("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_NAME = ".q($Q)."
ORDER BY ORDINAL_POSITION",null,"")as$K)$J[$K["TABLE_NAME"]]["keys"][$K["CONSTRAINT_NAME"]][$K["COLUMN_NAME"]]=$K["REFERENCED_COLUMN_NAME"];foreach($J
as$v=>$W){$B=adminer()->tableName(table_status1($v,true));if($B!=""){$He=preg_quote($hf);$Ne="(:|\\s*-)?\\s+";$J[$v]["name"]=(preg_match("(^$He$Ne(.+)|^(.+?)$Ne$He\$)iu",$B,$z)?$z[2].$z[3]:$B);}else
unset($J[$v]);}return$J;}function
backwardKeysPrint($sa,$K){foreach($sa
as$Q=>$ra){foreach($ra["keys"]as$Oa){$x=ME.'select='.urlencode($Q);$q=0;foreach($Oa
as$c=>$W)$x
.=where_link($q++,$c,$K[$W]);echo"<a href='".h($x)."'>".h($ra["name"])."</a>";$x=ME.'edit='.urlencode($Q);foreach($Oa
as$c=>$W)$x
.="&set".urlencode("[".bracket_escape($c)."]")."=".urlencode($K[$W]);echo"<a href='".h($x)."' title='".'New item'."'>+</a> ";}}}function
selectQuery($H,$af,$Ob=false){return"<!--\n".str_replace("--","--><!-- ",$H)."\n(".format_time($af).")\n-->\n";}function
rowDescription($Q){foreach(fields($Q)as$j){if(preg_match("~varchar|character varying~",$j["type"]))return
idf_escape($j["field"]);}return"";}function
rowDescriptions($L,$bc){$J=$L;foreach($L[0]as$v=>$W){if(list($Q,$r,$B)=$this->_foreignColumn($bc,$v)){$Cc=array();foreach($L
as$K)$Cc[$K[$v]]=q($K[$v]);$mb=$this->values[$Q];if(!$mb)$mb=get_key_vals("SELECT $r, $B FROM ".table($Q)." WHERE $r IN (".implode(", ",$Cc).")");foreach($L
as$A=>$K){if(isset($K[$v]))$J[$A][$v]=(string)$mb[$K[$v]];}}}return$J;}function
selectLink($W,$j){}function
selectVal($W,$x,$j,$Vd){$J="$W";$x=h($x);if(is_blob($j)&&!is_utf8($W)){$J=lang_format(array('%d byte','%d bytes'),strlen($Vd));if(preg_match("~^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)~",$Vd))$J="<img src='$x' alt='$J'>";}if(like_bool($j)&&$J!="")$J=(preg_match('~^(1|t|true|y|yes|on)$~i',$W)?'yes':'no');if($x)$J="<a href='$x'".(is_url($x)?target_blank():"").">$J</a>";if(preg_match('~date~',$j["type"]))$J="<div class='datetime'>$J</div>";return$J;}function
editVal($W,$j){if(preg_match('~date|timestamp~',$j["type"])&&$W!==null)return
preg_replace('~^(\d{2}(\d+))-(0?(\d+))-(0?(\d+))~','$1-$3-$5',$W);return$W;}function
config(){return
array();}function
selectColumnsPrint($M,$d){}function
selectSearchPrint($Z,$d,$u){$Z=(array)$_GET["where"];echo'<fieldset id="fieldset-search"><legend>'.'Search'."</legend><div>\n";$Xc=array();foreach($Z
as$v=>$W)$Xc[$W["col"]]=$v;$q=0;$k=fields($_GET["select"]);foreach($d
as$B=>$lb){$j=$k[$B];if($j["type"]=="enum"||like_bool($j)){$v=$Xc[$B];$q--;echo"<div>".h($lb).":".input_hidden("where[$q][col]",$B);$W=idx($Z[$v],"val");echo(like_bool($j)?"<select name='where[$q][val]'>".optionlist(array(""=>"",'no','yes'),$W,true)."</select>":enum_input("checkbox"," name='where[$q][val][]'",$j,(array)$W,'empty')),"</div>\n";unset($d[$B]);}elseif(is_array($C=$this->foreignKeyOptions($_GET["select"],$B))){if($k[$B]["null"])$C[0]='('.'empty'.')';$v=$Xc[$B];$q--;echo"<div>".h($lb).input_hidden("where[$q][col]",$B).input_hidden("where[$q][op]","=").": <select name='where[$q][val]'>".optionlist($C,idx($Z[$v],"val"),true)."</select></div>\n";unset($d[$B]);}}$q=0;foreach($Z
as$W){if(($W["col"]==""||$d[$W["col"]])&&"$W[col]$W[val]"!=""){echo"<div><select name='where[$q][col]'><option value=''>(".'anywhere'.")".optionlist($d,$W["col"],true)."</select>",html_select("where[$q][op]",array(-1=>"")+adminer()->operators(),$W["op"]),"<input type='search' name='where[$q][val]' value='".h($W["val"])."'>".script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});","")."</div>\n";$q++;}}echo"<div><select name='where[$q][col]'><option value=''>(".'anywhere'.")".optionlist($d,null,true)."</select>",script("qsl('select').onchange = selectAddRow;",""),html_select("where[$q][op]",array(-1=>"")+adminer()->operators()),"<input type='search' name='where[$q][val]'></div>",script("mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});"),"</div></fieldset>\n";}function
selectOrderPrint($D,$d,$u){$Ud=array();foreach($u
as$v=>$t){$D=array();foreach($t["columns"]as$W)$D[]=$d[$W];if(count(array_filter($D,'strlen'))>1&&$v!="PRIMARY")$Ud[$v]=implode(", ",$D);}if($Ud)echo'<fieldset><legend>'.'Sort'."</legend><div>","<select name='index_order'>".optionlist(array(""=>"")+$Ud,(idx($_GET["order"],0)!=""?"":$_GET["index_order"]),true)."</select>","</div></fieldset>\n";if($_GET["order"])echo"<div style='display: none;'>".hidden_fields(array("order"=>array(1=>reset($_GET["order"])),"desc"=>($_GET["desc"]?array(1=>1):array()),))."</div>\n";}function
selectLimitPrint($w){echo"<fieldset><legend>".'Limit'."</legend><div>",html_select("limit",array("",50,100),$w),"</div></fieldset>\n";}function
selectLengthPrint($mf){}function
selectActionPrint($u){echo"<fieldset><legend>".'Action'."</legend><div>","<input type='submit' value='".'Select'."'>","</div></fieldset>\n";}function
selectCommandPrint(){return
true;}function
selectImportPrint(){return
true;}function
selectEmailPrint($yb,$d){}function
selectColumnsProcess($d,$u){return
array(array(),array());}function
selectSearchProcess($k,$u){$J=array();foreach((array)$_GET["where"]as$v=>$Z){$La=$Z["col"];$Pd=$Z["op"];$W=$Z["val"];if(($v>=0&&$La!="")||$W!=""){$Ra=array();foreach(($La!=""?array($La=>$k[$La]):$k)as$B=>$j){if($La!=""||is_numeric($W)||!preg_match(number_type(),$j["type"])){$B=idf_escape($B);if($La!=""&&$j["type"]=="enum"){$Ec=array();foreach($W
as$Rf){if(preg_match('~val-~',$Rf))$Ec[]=q(substr($Rf,4));}$Ra[]=(in_array("null",$W)?"$B IS NULL OR ":"").($Ec?"$B IN (".implode(", ",$Ec).")":"0");}else{$nf=preg_match('~char|text|enum|set~',$j["type"]);$X=adminer()->processInput($j,(!$Pd&&$nf&&preg_match('~^[^%]+$~',$W)?"%$W%":$W));$Ra[]=driver()->convertSearch($B,$Z,$j).($X=="NULL"?" IS".($Pd==">="?" NOT":"")." $X":(in_array($Pd,adminer()->operators())||$Pd=="="?" $Pd $X":($nf?" LIKE $X":" IN (".($X[0]=="'"?str_replace(",","', '",$X):$X).")")));if($v<0&&$W=="0")$Ra[]="$B IS NULL";}}}$J[]=($Ra?"(".implode(" OR ",$Ra).")":"1 = 0");}}return$J;}function
selectOrderProcess($k,$u){$Gc=$_GET["index_order"];if($Gc!="")unset($_GET["order"][1]);if($_GET["order"])return
array(idf_escape(reset($_GET["order"])).($_GET["desc"]?" DESC":""));foreach(($Gc!=""?array($u[$Gc]):$u)as$t){if($Gc!=""||$t["type"]=="INDEX"){$pc=array_filter($t["descs"]);$lb=false;foreach($t["columns"]as$W){if(preg_match('~date|timestamp~',$k[$W]["type"])){$lb=true;break;}}$J=array();foreach($t["columns"]as$v=>$W)$J[]=idf_escape($W).(($pc?$t["descs"][$v]:$lb)?" DESC":"");return$J;}}return
array();}function
selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
selectLengthProcess(){return"100";}function
selectEmailProcess($Z,$bc){return
false;}function
selectQueryBuild($M,$Z,$p,$D,$w,$E){return"";}function
messageQuery($H,$of,$Ob=false){return" <span class='time'>".@date("H:i:s")."</span><!--\n".str_replace("--","--><!-- ",$H)."\n".($of?"($of)\n":"")."-->";}function
editRowPrint($Q,$k,$K,$Jf){}function
editFunctions($j){$J=array();if($j["null"]&&preg_match('~blob~',$j["type"]))$J["NULL"]='empty';$J[""]=($j["null"]||$j["auto_increment"]||like_bool($j)?"":"*");if(preg_match('~date|time~',$j["type"]))$J["now"]='now';if(preg_match('~_(md5|sha1)$~i',$j["field"],$z))$J[]=strtolower($z[1]);return$J;}function
editInput($Q,$j,$b,$X){if($j["type"]=="enum")return(isset($_GET["select"])?"<label><input type='radio'$b value='orig' checked><i>".'original'."</i></label> ":"").enum_input("radio",$b,$j,$X,'empty');$C=$this->foreignKeyOptions($Q,$j["field"],$X);if($C!==null)return(is_array($C)?"<select$b>".optionlist($C,$X,true)."</select>":"<input value='".h($X)."'$b class='hidden'>"."<input value='".h($C)."' class='jsonly'>"."<div></div>".script("qsl('input').oninput = partial(whisper, '".ME."script=complete&source=".urlencode($Q)."&field=".urlencode($j["field"])."&value='); qsl('div').onclick = whisperClick;",""));if(like_bool($j))return'<input type="checkbox" value="1"'.(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?' checked':'')."$b>";$wc="";if(preg_match('~time~',$j["type"]))$wc='HH:MM:SS';if(preg_match('~date|timestamp~',$j["type"]))$wc='[yyyy]-mm-dd'.($wc?" [$wc]":"");if($wc)return"<input value='".h($X)."'$b> ($wc)";if(preg_match('~_(md5|sha1)$~i',$j["field"]))return"<input type='password' value='".h($X)."'$b>";return'';}function
editHint($Q,$j,$X){return(preg_match('~\s+(\[.*\])$~',($j["comment"]!=""?$j["comment"]:$j["field"]),$z)?h(" $z[1]"):'');}function
processInput($j,$X,$o=""){if($o=="now")return"$o()";$J=$X;if(preg_match('~date|timestamp~',$j["type"])&&preg_match('(^'.str_replace('\$1','(?P<p1>\d*)',preg_replace('~(\\\\\\$([2-6]))~','(?P<p\2>\d{1,2})',preg_quote('$1-$3-$5'))).'(.*))',$X,$z))$J=($z["p1"]!=""?$z["p1"]:($z["p2"]!=""?($z["p2"]<70?20:19).$z["p2"]:gmdate("Y")))."-$z[p3]$z[p4]-$z[p5]$z[p6]".end($z);$J=q($J);if($X==""&&like_bool($j))$J="'0'";elseif($X==""&&($j["null"]||!preg_match('~char|text~',$j["type"])))$J="NULL";elseif(preg_match('~^(md5|sha1)$~',$o))$J="$o($J)";return
unconvert_field($j,$J);}function
dumpOutput(){return
array();}function
dumpFormat(){return
array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
dumpDatabase($g){}function
dumpTable($Q,$df,$Tc=0){echo"\xef\xbb\xbf";}function
dumpData($Q,$df,$H){$I=connection()->query($H,1);if($I){while($K=$I->fetch_assoc()){if($df=="table"){dump_csv(array_keys($K));$df="INSERT";}dump_csv($K);}}}function
dumpFilename($Bc){return
friendly_url($Bc);}function
dumpHeaders($Bc,$Bd=false){$Kb="csv";header("Content-Type: text/csv; charset=utf-8");return$Kb;}function
dumpFooter(){}function
importServerPath(){}function
homepage(){return
true;}function
navigation($zd){echo"<h1>".adminer()->name()." <span class='version'>".VERSION;$Fd=$_COOKIE["adminer_version"];echo" <a href='https://www.adminer.org/editor/#download'".target_blank()." id='version'>".(version_compare(VERSION,$Fd)<0?h($Fd):"")."</a>","</span></h1>\n";if($zd=="auth"){$Vb=true;foreach((array)$_SESSION["pwds"]as$Y=>$Pe){foreach($Pe[""]as$U=>$F){if($F!==null){if($Vb){echo"<ul id='logins'>",script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");$Vb=false;}echo"<li><a href='".h(auth_url($Y,"",$U))."'>".($U!=""?h($U):"<i>".'empty'."</i>")."</a>\n";}}}}else{adminer()->databasesPrint($zd);if($zd!="db"&&$zd!="ns"){$R=table_status('',true);if(!$R)echo"<p class='message'>".'No tables.'."\n";else
adminer()->tablesPrint($R);}}}function
syntaxHighlighting($S){}function
databasesPrint($zd){}function
tablesPrint($S){echo"<ul id='tables'>",script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($S
as$K){echo'<li>';$B=adminer()->tableName($K);if($B!="")echo"<a href='".h(ME).'select='.urlencode($K["Name"])."'".bold($_GET["select"]==$K["Name"]||$_GET["edit"]==$K["Name"],"select")." title='".'Select data'."'>$B</a>\n";}echo"</ul>\n";}function
_foreignColumn($bc,$c){foreach((array)$bc[$c]as$ac){if(count($ac["source"])==1){$B=adminer()->rowDescription($ac["table"]);if($B!=""){$r=idf_escape($ac["target"][0]);return
array($ac["table"],$r,$B);}}}}private
function
foreignKeyOptions($Q,$c,$X=null){if(list($kf,$r,$B)=$this->_foreignColumn(column_foreign_keys($Q),$c)){$J=&$this->values[$kf];if($J===null){$R=table_status1($kf);$J=($R["Rows"]>1000?"":array(""=>"")+get_key_vals("SELECT $r, $B FROM ".table($kf)." ORDER BY 2"));}if(!$J&&$X!==null)return
get_val("SELECT $B FROM ".table($kf)." WHERE $r = ".q($X));return$J;}}}class
Plugins{private
static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function
__construct($ie){if($ie===null){$ie=array();$va="adminer-plugins";if(is_dir($va)){foreach(glob("$va/*.php")as$l)$this->includeOnce($l);}$vc=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$va.php")){$Fc=$this->includeOnce("$va.php");if(is_array($Fc)){foreach($Fc
as$he)$ie[get_class($he)]=$he;}else$this->error
.=sprintf('%s must <a%s>return an array</a>.',"<b>$va.php</b>",$vc)."<br>";}foreach(get_declared_classes()as$Ia){if(!$ie[$Ia]&&(preg_match('~^Adminer\w~i',$Ia)||is_subclass_of($Ia,'Adminer\Plugin'))){$ze=new
\ReflectionClass($Ia);$Ta=$ze->getConstructor();if($Ta&&$Ta->getNumberOfRequiredParameters())$this->error
.=sprintf('<a%s>Configure</a> %s in %s.',$vc,"<b>$Ia</b>","<b>$va.php</b>")."<br>";else$ie[$Ia]=new$Ia;}}}$this->plugins=$ie;$ba=new
Adminer;$ie[]=$ba;$ze=new
\ReflectionObject($ba);foreach($ze->getMethods()as$yd){foreach($ie
as$he){$B=$yd->getName();if(method_exists($he,$B))$this->hooks[$B][]=$he;}}}function
includeOnce($l){return
include_once"./$l";}function
__call($B,array$ae){$ha=array();foreach($ae
as$v=>$W)$ha[]=&$ae[$v];$J=null;foreach($this->hooks[$B]as$he){$X=call_user_func_array(array($he,$B),$ha);if($X!==null){if(!self::$append[$B])return$X;$J=$X+(array)$J;}}return$J;}}abstract
class
Plugin{protected$translations=array();function
description(){return$this->lang('');}function
screenshot(){return"";}protected
function
lang($s,$Jd=null){$ha=func_get_args();$ha[0]=idx($this->translations[LANG],$s)?:$s;return
call_user_func_array('Adminer\lang_format',$ha);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new
Plugins(null):new
Adminer));SqlDriver::$drivers=array("server"=>"MySQL / MariaDB")+SqlDriver::$drivers;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class
Db
extends
\MySQLi{static$instance;var$extension="MySQLi",$flavor='';function
__construct(){parent::init();}function
attach($N,$U,$F){mysqli_report(MYSQLI_REPORT_OFF);list($yc,$je)=host_port($N);$Ze=adminer()->connectSsl();if($Ze)$this->ssl_set($Ze['key'],$Ze['cert'],$Ze['ca'],'','');$J=@$this->real_connect(($N!=""?$yc:ini_get("mysqli.default_host")),($N.$U!=""?$U:ini_get("mysqli.default_user")),($N.$U.$F!=""?$F:ini_get("mysqli.default_pw")),null,(is_numeric($je)?intval($je):ini_get("mysqli.default_port")),(is_numeric($je)?null:$je),($Ze?($Ze['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($J?'':$this->error);}function
set_charset($Da){if(parent::set_charset($Da))return
true;parent::set_charset('utf8');return$this->query("SET NAMES $Da");}function
next_result(){return
self::more_results()&&parent::next_result();}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
Db
extends
SqlDb{private$link;function
attach($N,$U,$F){if(ini_bool("mysql.allow_local_infile"))return
sprintf('Disable %s or enable %s or %s extensions.',"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$this->link=@mysql_connect(($N!=""?$N:ini_get("mysql.default_host")),($N.$U!=""?$U:ini_get("mysql.default_user")),($N.$U.$F!=""?$F:ini_get("mysql.default_password")),true,131072);if(!$this->link)return
mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function
set_charset($Da){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Da,$this->link))return
true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Da");}function
quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function
select_db($fb){return
mysql_select_db($fb,$this->link);}function
query($H,$Cf=false){$I=@($Cf?mysql_unbuffered_query($H,$this->link):mysql_query($H,$this->link));$this->error="";if(!$I){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return
false;}if($I===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
true;}return
new
Result($I);}}class
Result{var$num_rows;private$result;private$offset=0;function
__construct($I){$this->result=$I;$this->num_rows=mysql_num_rows($I);}function
fetch_assoc(){return
mysql_fetch_assoc($this->result);}function
fetch_row(){return
mysql_fetch_row($this->result);}function
fetch_field(){$J=mysql_fetch_field($this->result,$this->offset++);$J->orgtable=$J->table;$J->charsetnr=($J->blob?63:0);return$J;}function
__destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_mysql")){class
Db
extends
PdoDb{var$extension="PDO_MySQL";function
attach($N,$U,$F){$C=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$Ze=adminer()->connectSsl();if($Ze){if($Ze['key'])$C[\PDO::MYSQL_ATTR_SSL_KEY]=$Ze['key'];if($Ze['cert'])$C[\PDO::MYSQL_ATTR_SSL_CERT]=$Ze['cert'];if($Ze['ca'])$C[\PDO::MYSQL_ATTR_SSL_CA]=$Ze['ca'];if(isset($Ze['verify']))$C[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Ze['verify'];}list($yc,$je)=host_port($N);return$this->dsn("mysql:charset=utf8;host=$yc".($je?(is_numeric($je)?";port=":";unix_socket=").$je:""),$U,$F,$C);}function
set_charset($Da){return$this->query("SET NAMES $Da");}function
select_db($fb){return$this->query("USE ".idf_escape($fb));}function
query($H,$Cf=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Cf);return
parent::query($H,$Cf);}}}class
Driver
extends
SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="sql";var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");static
function
connect($N,$U,$F){$e=parent::connect($N,$U,$F);if(is_string($e)){if(function_exists('iconv')&&!is_utf8($e)&&strlen($Fe=iconv("windows-1250","utf-8",$e))>strlen($e))$e=$Fe;return$e;}$e->set_charset(charset($e));$e->query("SET sql_quote_show_create = 1, autocommit = 1");$e->flavor=(preg_match('~MariaDB~',$e->server_info)?'maria':'mysql');add_driver(DRIVER,($e->flavor=='maria'?"MariaDB":"MySQL"));return$e;}function
__construct(Db$e){parent::__construct($e);$this->types=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),);$this->insertFunctions=array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",);if(min_version('5.7.8',10.2,$e))$this->types['Strings']["json"]=4294967295;if(min_version('',10.7,$e)){$this->types['Strings']["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version(9,'',$e)){$this->types['Numbers']["vector"]=16383;$this->insertFunctions['vector']='string_to_vector';}if(min_version(5.1,'',$e))$this->partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");if(min_version(5.7,10.2,$e))$this->generated=array("STORED","VIRTUAL");}function
unconvertFunction(array$j){return(preg_match("~binary~",$j["type"])?"<code class='jush-sql'>UNHEX</code>":($j["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"<code>b''</code>"):(preg_match("~geometry|point|linestring|polygon~",$j["type"])?"<code class='jush-sql'>GeomFromText</code>":"")));}function
insert($Q,array$O){return($O?parent::insert($Q,$O):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function
insertUpdate($Q,array$L,array$oe){$d=array_keys(reset($L));$ne="INSERT INTO ".table($Q)." (".implode(", ",$d).") VALUES\n";$Sf=array();foreach($d
as$v)$Sf[$v]="$v = VALUES($v)";$ff="\nON DUPLICATE KEY UPDATE ".implode(", ",$Sf);$Sf=array();$fd=0;foreach($L
as$O){$X="(".implode(", ",$O).")";if($Sf&&(strlen($ne)+$fd+strlen($X)+strlen($ff)>1e6)){if(!queries($ne.implode(",\n",$Sf).$ff))return
false;$Sf=array();$fd=0;}$Sf[]=$X;$fd+=strlen($X)+2;}return
queries($ne.implode(",\n",$Sf).$ff);}function
slowQuery($H,$pf){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$pf FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$z))return"$z[1] /*+ MAX_EXECUTION_TIME(".($pf*1000).") */ $z[2]";}}function
convertSearch($s,array$W,array$j){return(preg_match('~char|text|enum|set~',$j["type"])&&!preg_match("~^utf8~",$j["collation"])&&preg_match('~[\x80-\xFF]~',$W['val'])?"CONVERT($s USING ".charset($this->conn).")":$s);}function
warnings(){$I=$this->conn->query("SHOW WARNINGS");if($I&&$I->num_rows){ob_start();print_select_result($I);return
ob_get_clean();}}function
tableHelp($B,$Tc=false){$kd=($this->conn->flavor=='maria');if(information_schema(DB))return
strtolower("information-schema-".($kd?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="mysql")return($kd?"mysql$B-table/":"system-schema.html");}function
partitionsInfo($Q){$fc="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($Q);$I=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $fc ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$J=array();list($J["partition_by"],$J["partition"],$J["partitions"])=$I->fetch_row();$de=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $fc AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$J["partition_names"]=array_keys($de);$J["partition_values"]=array_values($de);return$J;}function
hasCStyleEscapes(){static$Ba;if($Ba===null){$Ye=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Ba=(strpos($Ye,'NO_BACKSLASH_ESCAPES')===false);}return$Ba;}function
engines(){$J=array();foreach(get_rows("SHOW ENGINES")as$K){if(preg_match("~YES|DEFAULT~",$K["Support"]))$J[]=$K["Engine"];}return$J;}function
indexAlgorithms(array$if){return(preg_match('~^(MEMORY|NDB)$~',$if["Engine"])?array("HASH","BTREE"):array());}}function
idf_escape($s){return"`".str_replace("`","``",$s)."`";}function
table($s){return
idf_escape($s);}function
get_databases($Xb){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$J=($Xb?slow_query($H):get_vals($H));restart_session();set_session("dbs",$J);stop_session();}return$J;}function
limit($H,$Z,$w,$Kd=0,$Ne=" "){return" $H$Z".($w?$Ne."LIMIT $w".($Kd?" OFFSET $Kd":""):"");}function
limit1($Q,$H,$Z,$Ne="\n"){return
limit($H,$Z,1,0,$Ne);}function
db_collation($g,array$Na){$J=null;$Xa=get_val("SHOW CREATE DATABASE ".idf_escape($g),1);if(preg_match('~ COLLATE ([^ ]+)~',$Xa,$z))$J=$z[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$Xa,$z))$J=$Na[$z[1]][-1];return$J;}function
logged_user(){return
get_val("SELECT USER()");}function
tables_list(){return
get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function
count_tables(array$gb){$J=array();foreach($gb
as$g)$J[$g]=count(get_vals("SHOW TABLES IN ".idf_escape($g)));return$J;}function
table_status($B="",$Pb=false){$J=array();foreach(get_rows($Pb?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($B!=""?"AND TABLE_NAME = ".q($B):"ORDER BY Name"):"SHOW TABLE STATUS".($B!=""?" LIKE ".q(addcslashes($B,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($B!="")$K["Name"]=$B;$J[$K["Name"]]=$K;}return$J;}function
is_view(array$R){return$R["Engine"]===null;}function
fk_support(array$R){return
preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$R["Engine"]);}function
fields($Q){$kd=(connection()->flavor=='maria');$J=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$K){$j=$K["COLUMN_NAME"];$T=$K["COLUMN_TYPE"];$jc=$K["GENERATION_EXPRESSION"];$Nb=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Nb,$ic);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$T,$md);$h=$K["COLUMN_DEFAULT"];if($h!=""){$Sc=preg_match('~text|json~',$md[1]);if(!$kd&&$Sc)$h=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($h));if($kd||$Sc){$h=($h=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($z){return
stripslashes(str_replace("''","'",$z[1]));},$h));}if(!$kd&&preg_match('~binary~',$md[1])&&preg_match('~^0x(\w*)$~',$h,$z))$h=pack("H*",$z[1]);}$J[$j]=array("field"=>$j,"full_type"=>$T,"type"=>$md[1],"length"=>$md[2],"unsigned"=>ltrim($md[3].$md[4]),"default"=>($ic?($kd?$jc:stripslashes($jc)):$h),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Nb=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Nb,$z)?$z[1]:""),"collation"=>$K["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$K[PRIVILEGES],where,order")),"comment"=>$K["COLUMN_COMMENT"],"primary"=>($K["COLUMN_KEY"]=="PRI"),"generated"=>($ic[1]=="PERSISTENT"?"STORED":$ic[1]),);}return$J;}function
indexes($Q,$f=null){$J=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$f)as$K){$B=$K["Key_name"];$J[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($K["Index_type"]=="FULLTEXT"?"FULLTEXT":($K["Non_unique"]?($K["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$J[$B]["columns"][]=$K["Column_name"];$J[$B]["lengths"][]=($K["Index_type"]=="SPATIAL"?null:$K["Sub_part"]);$J[$B]["descs"][]=null;$J[$B]["algorithm"]=$K["Index_type"];}return$J;}function
foreign_keys($Q){static$fe='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$Ya=get_val("SHOW CREATE TABLE ".table($Q),1);if($Ya){preg_match_all("~CONSTRAINT ($fe) FOREIGN KEY ?\\(((?:$fe,? ?)+)\\) REFERENCES ($fe)(?:\\.($fe))? \\(((?:$fe,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$Ya,$nd,PREG_SET_ORDER);foreach($nd
as$z){preg_match_all("~$fe~",$z[2],$We);preg_match_all("~$fe~",$z[5],$kf);$J[idf_unescape($z[1])]=array("db"=>idf_unescape($z[4]!=""?$z[3]:$z[4]),"table"=>idf_unescape($z[4]!=""?$z[4]:$z[3]),"source"=>array_map('Adminer\idf_unescape',$We[0]),"target"=>array_map('Adminer\idf_unescape',$kf[0]),"on_delete"=>($z[6]?:"RESTRICT"),"on_update"=>($z[7]?:"RESTRICT"),);}}return$J;}function
view($B){return
array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function
collations(){$J=array();foreach(get_rows("SHOW COLLATION")as$K){if($K["Default"])$J[$K["Charset"]][-1]=$K["Collation"];else$J[$K["Charset"]][]=$K["Collation"];}ksort($J);foreach($J
as$v=>$W)sort($J[$v]);return$J;}function
information_schema($g){return($g=="information_schema")||(min_version(5.5)&&$g=="performance_schema");}function
error(){return
h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function
create_database($g,$Ma){return
queries("CREATE DATABASE ".idf_escape($g).($Ma?" COLLATE ".q($Ma):""));}function
drop_databases(array$gb){$J=apply_queries("DROP DATABASE",$gb,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$J;}function
rename_database($B,$Ma){$J=false;if(create_database($B,$Ma)){$S=array();$Vf=array();foreach(tables_list()as$Q=>$T){if($T=='VIEW')$Vf[]=$Q;else$S[]=$Q;}$J=(!$S&&!$Vf)||move_tables($S,$Vf,$B);drop_databases($J?array(DB):array());}return$J;}function
auto_increment(){$oa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$t){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$t["columns"],true)){$oa="";break;}if($t["type"]=="PRIMARY")$oa=" UNIQUE";}}return" AUTO_INCREMENT$oa";}function
alter_table($Q,$B,array$k,array$Zb,$Qa,$Ab,$Ma,$na,$ce){$fa=array();foreach($k
as$j){if($j[1]){$h=$j[1][3];if(preg_match('~ GENERATED~',$h)){$j[1][3]=(connection()->flavor=='maria'?"":$j[1][2]);$j[1][2]=$h;}$fa[]=($Q!=""?($j[0]!=""?"CHANGE ".idf_escape($j[0]):"ADD"):" ")." ".implode($j[1]).($Q!=""?$j[2]:"");}else$fa[]="DROP ".idf_escape($j[0]);}$fa=array_merge($fa,$Zb);$bf=($Qa!==null?" COMMENT=".q($Qa):"").($Ab?" ENGINE=".q($Ab):"").($Ma?" COLLATE ".q($Ma):"").($na!=""?" AUTO_INCREMENT=$na":"");if($ce){$de=array();if($ce["partition_by"]=='RANGE'||$ce["partition_by"]=='LIST'){foreach($ce["partition_names"]as$v=>$W){$X=$ce["partition_values"][$v];$de[]="\n  PARTITION ".idf_escape($W)." VALUES ".($ce["partition_by"]=='RANGE'?"LESS THAN":"IN").($X!=""?" ($X)":" MAXVALUE");}}$bf
.="\nPARTITION BY $ce[partition_by]($ce[partition])";if($de)$bf
.=" (".implode(",",$de)."\n)";elseif($ce["partitions"])$bf
.=" PARTITIONS ".(+$ce["partitions"]);}elseif($ce===null)$bf
.="\nREMOVE PARTITIONING";if($Q=="")return
queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$fa)."\n)$bf");if($Q!=$B)$fa[]="RENAME TO ".table($B);if($bf)$fa[]=ltrim($bf);return($fa?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$fa)):true);}function
alter_indexes($Q,$fa){$Ca=array();foreach($fa
as$W)$Ca[]=($W[2]=="DROP"?"\nDROP INDEX ".idf_escape($W[1]):"\nADD $W[0] ".($W[0]=="PRIMARY"?"KEY ":"").($W[1]!=""?idf_escape($W[1])." ":"")."(".implode(", ",$W[2]).")");return
queries("ALTER TABLE ".table($Q).implode(",",$Ca));}function
truncate_tables(array$S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views(array$Vf){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Vf)));}function
drop_tables(array$S){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function
move_tables(array$S,array$Vf,$kf){$Ae=array();foreach($S
as$Q)$Ae[]=table($Q)." TO ".idf_escape($kf).".".table($Q);if(!$Ae||queries("RENAME TABLE ".implode(", ",$Ae))){$jb=array();foreach($Vf
as$Q)$jb[table($Q)]=view($Q);connection()->select_db($kf);$g=idf_escape(DB);foreach($jb
as$B=>$Uf){if(!queries("CREATE VIEW $B AS ".str_replace(" $g."," ",$Uf["select"]))||!queries("DROP VIEW $g.$B"))return
false;}return
true;}return
false;}function
copy_tables(array$S,array$Vf,$kf){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S
as$Q){$B=($kf==DB?table("copy_$Q"):idf_escape($kf).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($Q))||!queries("INSERT INTO $B SELECT * FROM ".table($Q)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$K){$_f=$K["Trigger"];if(!queries("CREATE TRIGGER ".($kf==DB?idf_escape("copy_$_f"):idf_escape($kf).".".idf_escape($_f))." $K[Timing] $K[Event] ON $B FOR EACH ROW\n$K[Statement];"))return
false;}}foreach($Vf
as$Q){$B=($kf==DB?table("copy_$Q"):idf_escape($kf).".".table($Q));$Uf=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $Uf[select]"))return
false;}return
true;}function
trigger($B,$Q){if($B=="")return
array();$L=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));return
reset($L);}function
triggers($Q){$J=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$K)$J[$K["Trigger"]]=array($K["Timing"],$K["Event"]);return$J;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($B,$T){$k=get_rows("SELECT
	PARAMETER_NAME field,
	DATA_TYPE type,
	CHARACTER_MAXIMUM_LENGTH length,
	REGEXP_REPLACE(DTD_IDENTIFIER, '^[^ ]+ ', '') `unsigned`,
	1 `null`,
	DTD_IDENTIFIER full_type,
	PARAMETER_MODE `inout`,
	CHARACTER_SET_NAME collation
FROM information_schema.PARAMETERS
WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND SPECIFIC_NAME = ".q($B)."
ORDER BY ORDINAL_POSITION");$J=connection()->query("SELECT ROUTINE_COMMENT comment, ROUTINE_DEFINITION definition, 'SQL' language
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND ROUTINE_NAME = ".q($B))->fetch_assoc();if($k&&$k[0]['field']=='')$J['returns']=array_shift($k);$J['fields']=$k;return$J;}function
routines(){return
get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function
routine_languages(){return
array();}function
routine_id($B,array$K){return
idf_escape($B);}function
last_id($I){return
get_val("SELECT LAST_INSERT_ID()");}function
explain(Db$e,$H){return$e->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$H);}function
found_rows(array$R,array$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function
create_sql($Q,$na,$df){$J=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$na)$J=preg_replace('~ AUTO_INCREMENT=\d+~','',$J);return$J;}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
use_sql($fb,$df=""){$B=idf_escape($fb);$J="";if(preg_match('~CREATE~',$df)&&($Xa=get_val("SHOW CREATE DATABASE $B",1))){set_utf8mb4($Xa);if($df=="DROP+CREATE")$J="DROP DATABASE IF EXISTS $B;\n";$J
.="$Xa;\n";}return$J."USE $B";}function
trigger_sql($Q){$J="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$K)$J
.="\nCREATE TRIGGER ".idf_escape($K["Trigger"])." $K[Timing] $K[Event] ON ".table($K["Table"])." FOR EACH ROW\n$K[Statement];;\n";return$J;}function
show_variables(){return
get_rows("SHOW VARIABLES");}function
show_status(){return
get_rows("SHOW STATUS");}function
process_list(){return
get_rows("SHOW FULL PROCESSLIST");}function
convert_field(array$j){if(preg_match("~binary~",$j["type"]))return"HEX(".idf_escape($j["field"]).")";if($j["type"]=="bit")return"BIN(".idf_escape($j["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$j["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($j["field"]).")";}function
unconvert_field(array$j,$J){if(preg_match("~binary~",$j["type"]))$J="UNHEX($J)";if($j["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$j["type"])){$ne=(min_version(8)?"ST_":"");$J=$ne."GeomFromText($J, $ne"."SRID($j[field]))";}return$J;}function
support($Qb){return
preg_match('~^(comment|columns|copy|database|drop_col|dump|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(5.1)?'|event':'').(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').')$~',$Qb);}function
kill_process($r){return
queries("KILL ".number($r));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){return
get_val("SELECT @@max_connections");}function
types(){return
array();}function
type_values($r){return"";}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($Ge,$f=null){return
true;}}define('Adminer\JUSH',Driver::$jush);define('Adminer\SERVER',"".$_GET[DRIVER]);define('Adminer\DB',"$_GET[db]");define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').($_GET["ext"]?"ext=".urlencode($_GET["ext"]).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));function
page_header($qf,$i="",$Aa=array(),$rf=""){page_headers();if(is_ajax()&&$i){page_messages($i);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$sf=$qf.($rf!=""?": $rf":"");$tf=strip_tags($sf.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->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">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>',$tf,'</title>
<link rel="stylesheet" href="',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=5.4.2"),'">
';$bb=adminer()->css();if(is_int(key($bb)))$bb=array_fill_keys($bb,'light');$rc=in_array('light',$bb)||in_array('',$bb);$oc=in_array('dark',$bb)||in_array('',$bb);$db=($rc?($oc?null:false):($oc?:null));$vd=" media='(prefers-color-scheme: dark)'";if($db!==false)echo"<link rel='stylesheet'".($db?"":$vd)." href='".h(preg_replace("~\\?.*~","",ME)."?file=dark.css&version=5.4.2")."'>\n";echo"<meta name='color-scheme' content='".($db===null?"light dark":($db?"dark":"light"))."'>\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.4.2");if(adminer()->head($db))echo"<link rel='icon' href='data:image/gif;base64,R0lGODlhEAAQAJEAAAQCBPz+/PwCBAROZCH5BAEAAAAALAAAAAAQABAAAAI2hI+pGO1rmghihiUdvUBnZ3XBQA7f05mOak1RWXrNq5nQWHMKvuoJ37BhVEEfYxQzHjWQ5qIAADs='>\n","<link rel='apple-touch-icon' href='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.2")."'>\n";foreach($bb
as$Nf=>$_d){$b=($_d=='dark'&&!$db?$vd:($_d=='light'&&$oc?" media='(prefers-color-scheme: light)'":""));echo"<link rel='stylesheet'$b href='".h($Nf)."'>\n";}echo"\n<body class='".'ltr'." nojs";adminer()->bodyClass();echo"'>\n";$l=get_temp_dir()."/adminer.version";echo
script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."')")."});
document.body.classList.replace('nojs', 'js');
const offlineMessage = '".js_escape('You are offline.')."';
const thousandsSeparator = '".js_escape(',')."';"),"<div id='help' class='jush-".JUSH." jsonly hidden'></div>\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"<div id='content'>\n","<span id='menuopen' class='jsonly'>".icon("move","","menu","")."</span>".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Aa!==null){$x=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'<p id="breadcrumb"><a href="'.h($x?:".").'">'.get_driver(DRIVER).'</a> » ';$x=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$N=adminer()->serverName(SERVER);$N=($N!=""?$N:'Server');if($Aa===false)echo"$N\n";else{echo"<a href='".h($x)."' accesskey='1' title='Alt+Shift+1'>$N</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Aa)))echo'<a href="'.h($x."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).'">'.h(DB).'</a> » ';if(is_array($Aa)){if($_GET["ns"]!="")echo'<a href="'.h(substr(ME,0,-1)).'">'.h($_GET["ns"]).'</a> » ';foreach($Aa
as$v=>$W){$lb=(is_array($W)?$W[1]:h($W));if($lb!="")echo"<a href='".h(ME."$v=").urlencode(is_array($W)?$W[0]:$W)."'>$lb</a> » ";}}echo"$qf\n";}}echo"<h2>$sf</h2>\n","<div id='ajaxstatus' class='jsonly hidden'></div>\n";restart_session();page_messages($i);$gb=&get_session("dbs");if(DB!=""&&$gb&&!in_array(DB,$gb,true))$gb=null;stop_session();define('Adminer\PAGE_HEADER',1);}function
page_headers(){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(adminer()->csp(csp())as$ab){$sc=array();foreach($ab
as$v=>$W)$sc[]="$v $W";header("Content-Security-Policy: ".implode("; ",$sc));}adminer()->headers();}function
csp(){return
array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self' https://www.adminer.org","frame-src"=>"'none'","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function
get_nonce(){static$Hd;if(!$Hd)$Hd=base64_encode(rand_string());return$Hd;}function
page_messages($i){$Mf=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$xd=idx($_SESSION["messages"],$Mf);if($xd){echo"<div class='message'>".implode("</div>\n<div class='message'>",$xd)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$Mf]);}if($i)echo"<div class='error'>$i</div>\n";if(adminer()->error)echo"<div class='error'>".adminer()->error."</div>\n";}function
page_footer($zd=""){echo"</div>\n\n<div id='foot' class='foot'>\n<div id='menu'>\n";adminer()->navigation($zd);echo"</div>\n";if($zd!="auth")echo'<form action="" method="post">
<p class="logout">
<span>',h($_GET["username"])."\n",'</span>
<input type="submit" name="logout" value="Logout" id="logout">
',input_token(),'</form>
';echo"</div>\n\n",script("setupSubmitHighlight(document);");}function
int32($A){while($A>=2147483648)$A-=4294967296;while($A<=-2147483649)$A+=4294967296;return(int)$A;}function
long2str(array$V,$Xf){$Fe='';foreach($V
as$W)$Fe
.=pack('V',$W);if($Xf)return
substr($Fe,0,end($V));return$Fe;}function
str2long($Fe,$Xf){$V=array_values(unpack('V*',str_pad($Fe,4*ceil(strlen($Fe)/4),"\0")));if($Xf)$V[]=strlen($Fe);return$V;}function
xxtea_mx($cg,$bg,$gf,$Wc){return
int32((($cg>>5&0x7FFFFFF)^$bg<<2)+(($bg>>3&0x1FFFFFFF)^$cg<<4))^int32(($gf^$bg)+($Wc^$cg));}function
encrypt_string($cf,$v){if($cf=="")return"";$v=array_values(unpack("V*",pack("H*",md5($v))));$V=str2long($cf,true);$A=count($V)-1;$cg=$V[$A];$bg=$V[0];$se=floor(6+52/($A+1));$gf=0;while($se-->0){$gf=int32($gf+0x9E3779B9);$tb=$gf>>2&3;for($Xd=0;$Xd<$A;$Xd++){$bg=$V[$Xd+1];$Cd=xxtea_mx($cg,$bg,$gf,$v[$Xd&3^$tb]);$cg=int32($V[$Xd]+$Cd);$V[$Xd]=$cg;}$bg=$V[0];$Cd=xxtea_mx($cg,$bg,$gf,$v[$Xd&3^$tb]);$cg=int32($V[$A]+$Cd);$V[$A]=$cg;}return
long2str($V,false);}function
decrypt_string($cf,$v){if($cf=="")return"";if(!$v)return
false;$v=array_values(unpack("V*",pack("H*",md5($v))));$V=str2long($cf,false);$A=count($V)-1;$cg=$V[$A];$bg=$V[0];$se=floor(6+52/($A+1));$gf=int32($se*0x9E3779B9);while($gf){$tb=$gf>>2&3;for($Xd=$A;$Xd>0;$Xd--){$cg=$V[$Xd-1];$Cd=xxtea_mx($cg,$bg,$gf,$v[$Xd&3^$tb]);$bg=int32($V[$Xd]-$Cd);$V[$Xd]=$bg;}$cg=$V[$A];$Cd=xxtea_mx($cg,$bg,$gf,$v[$Xd&3^$tb]);$bg=int32($V[0]-$Cd);$V[0]=$bg;$gf=int32($gf-0x9E3779B9);}return
long2str($V,true);}$G=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$W){list($v)=explode(":",$W);$G[$v]=$W;}}function
add_invalid_login(){$ua=get_temp_dir()."/adminer.invalid";foreach(glob("$ua*")?:array($ua)as$l){$n=file_open_lock($l);if($n)break;}if(!$n)$n=file_open_lock("$ua-".rand_string());if(!$n)return;$Oc=unserialize(stream_get_contents($n));$of=time();if($Oc){foreach($Oc
as$Pc=>$W){if($W[0]<$of)unset($Oc[$Pc]);}}$Nc=&$Oc[adminer()->bruteForceKey()];if(!$Nc)$Nc=array($of+30*60,0);$Nc[1]++;file_write_unlock($n,serialize($Oc));}function
check_invalid_login(array&$G){$Oc=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$l){$n=file_open_lock($l);if($n){$Oc=unserialize(stream_get_contents($n));file_unlock($n);break;}}$Nc=idx($Oc,adminer()->bruteForceKey(),array());$Gd=($Nc[1]>29?$Nc[0]-time():0);if($Gd>0)auth_error(lang_format(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($Gd/60)),$G);}$ma=$_POST["auth"];if($ma){session_regenerate_id();$Y=$ma["driver"];$N=$ma["server"];$U=$ma["username"];$F=(string)$ma["password"];$g=$ma["db"];set_password($Y,$N,$U,$F);$_SESSION["db"][$Y][$N][$U][$g]=true;if($ma["permanent"]){$v=implode("-",array_map('base64_encode',array($Y,$N,$U,$g)));$qe=adminer()->permanentLogin(true);$G[$v]="$v:".base64_encode($qe?encrypt_string($F,$qe):"");cookie("adminer_permanent",implode(" ",$G));}if(count($_POST)==1||DRIVER!=$Y||SERVER!=$N||$_GET["username"]!==$U||DB!=$g)redirect(auth_url($Y,$N,$U,$g));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$v)set_session($v,null);unset_permanent($G);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($G&&!$_SESSION["pwds"]){session_regenerate_id();$qe=adminer()->permanentLogin();foreach($G
as$v=>$W){list(,$Ha)=explode(":",$W);list($Y,$N,$U,$g)=array_map('base64_decode',explode("-",$v));set_password($Y,$N,$U,decrypt_string(base64_decode($Ha),$qe));$_SESSION["db"][$Y][$N][$U][$g]=true;}}function
unset_permanent(array&$G){foreach($G
as$v=>$W){list($Y,$N,$U,$g)=array_map('base64_decode',explode("-",$v));if($Y==DRIVER&&$N==SERVER&&$U==$_GET["username"]&&$g==DB)unset($G[$v]);}cookie("adminer_permanent",implode(" ",$G));}function
auth_error($i,array&$G){$Qe=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$Qe]||$_GET[$Qe])&&!$_SESSION["token"])$i='Session expired, please login again.';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$i
.=($i?'<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($G);}}if(!$_COOKIE[$Qe]&&$_GET[$Qe]&&ini_bool("session.use_only_cookies"))$i='Session support must be enabled.';$ae=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$ae["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$i,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";adminer()->loginForm();echo"</form>\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($G);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$e='';if(isset($_GET["username"])&&is_string(get_password())){list(,$je)=host_port(SERVER);if(preg_match('~^\s*([-+]?\d+)~',$je,$z)&&($z[1]<1024||$z[1]>65535))auth_error('Connecting to privileged ports is not allowed.',$G);check_invalid_login($G);$Za=adminer()->credentials();$e=Driver::connect($Za[0],$Za[1],$Za[2]);if(is_object($e)){Db::$instance=$e;Driver::$instance=new
Driver($e);if($e->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$id=null;if(!is_object($e)||($id=adminer()->login($_GET["username"],get_password()))!==true){$i=(is_string($e)?nl_br(h($e)):(is_string($id)?$id:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'<br>'.'There is a space in the input password which might be the cause.':'');auth_error($i,$G);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($ma&&$_POST["token"])$_POST["token"]=get_token();$i='';if($_POST){if(!verify_token()){$Ic="max_input_vars";$td=ini_get($Ic);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$v){$W=ini_get($v);if($W&&(!$td||$W<$td)){$Ic=$v;$td=$W;}}}$i=(!$_POST["token"]&&$td?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Ic'"):'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"){$i=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$i
.=' '.'You can upload a big SQL file via FTP and import it from server.';}function
doc_link(array$ee,$lf=""){return"";}function
email_header($sc){return"=?UTF-8?B?".base64_encode($sc)."?=";}function
send_mail($xb,$ef,$_,$fc="",array$Tb=array()){$Db=PHP_EOL;$_=str_replace("\n",$Db,wordwrap(str_replace("\r","","$_\n")));$_a=uniqid("boundary");$la="";foreach((array)$Tb["error"]as$v=>$W){if(!$W)$la
.="--$_a$Db"."Content-Type: ".str_replace("\n","",$Tb["type"][$v]).$Db."Content-Disposition: attachment; filename=\"".preg_replace('~["\n]~','',$Tb["name"][$v])."\"$Db"."Content-Transfer-Encoding: base64$Db$Db".chunk_split(base64_encode(file_get_contents($Tb["tmp_name"][$v])),76,$Db).$Db;}$wa="";$tc="Content-Type: text/plain; charset=utf-8$Db"."Content-Transfer-Encoding: 8bit";if($la){$la
.="--$_a--$Db";$wa="--$_a$Db$tc$Db$Db";$tc="Content-Type: multipart/mixed; boundary=\"$_a\"";}$tc
.=$Db."MIME-Version: 1.0$Db"."X-Mailer: Adminer Editor".($fc?$Db."From: ".str_replace("\n","",$fc):"");return
mail($xb,email_header($ef),$wa.$_.$la,$tc);}function
like_bool(array$j){return
preg_match("~bool|bit~",$j["type"]);}connection()->select_db(adminer()->database());adminer()->afterConnect();add_driver(DRIVER,'Login');if(isset($_GET["select"])&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["download"])){$a=$_GET["download"];$k=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$M=array(idf_escape($_GET["field"]));$I=driver()->select($a,$M,array(where($_GET,$k)),$M);$K=($I?$I->fetch_row():array());echo
driver()->value($K[0],$k[$_GET["field"]]);exit;}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$k=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$k):""):where($_GET,$k));$Jf=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($k
as$B=>$j){if((!$Jf&&!isset($j["privileges"]["insert"]))||adminer()->fieldName($j)=="")unset($k[$B]);}if($_POST&&!$i&&!isset($_GET["select"])){$y=$_POST["referer"];if($_POST["insert"])$y=($Jf?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$y))$y=ME."select=".urlencode($a);$u=indexes($a);$Ef=unique_array($_GET["where"],$u);$ve="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($y,'Item has been deleted.',driver()->delete($a,$ve,$Ef?0:1));else{$O=array();foreach($k
as$B=>$j){$W=process_input($j);if($W!==false&&$W!==null)$O[idf_escape($B)]=$W;}if($Jf){if(!$O)redirect($y);queries_redirect($y,'Item has been updated.',driver()->update($a,$O,$ve,$Ef?0:1));if(is_ajax()){page_headers();page_messages($i);exit;}}else{$I=driver()->insert($a,$O);$dd=($I?last_id($I):0);queries_redirect($y,sprintf('Item%s has been inserted.',($dd?" $dd":"")),$I);}}}$K=null;if($Z){$M=array();foreach($k
as$B=>$j){if(isset($j["privileges"]["select"])){$ja=($_POST["clone"]&&$j["auto_increment"]?"''":convert_field($j));$M[]=($ja?"$ja AS ":"").idf_escape($B);}}$K=array();if(!support("table"))$M=array("*");if($M){$I=driver()->select($a,$M,array($Z),$M,array(),(isset($_GET["select"])?2:1));if(!$I)$i=error();else{$K=$I->fetch_assoc();if(!$K)$K=false;}if(isset($_GET["select"])&&(!$K||$I->fetch_assoc()))$K=null;}}if(!support("table")&&!$k){if(!$Z){$I=driver()->select($a,array("*"),array(),array("*"));$K=($I?$I->fetch_assoc():false);if(!$K)$K=array(driver()->primary=>"");}if($K){foreach($K
as$v=>$W){if(!$Z)$K[$v]=null;$k[$v]=array("field"=>$v,"null"=>($v!=driver()->primary),"auto_increment"=>($v==driver()->primary));}}}if($_POST["save"])$K=(array)$_POST["fields"]+($K?$K:array());edit_form($a,$k,$K,$Jf,$i);}elseif(isset($_GET["select"])){$a=$_GET["select"];$R=table_status1($a);$u=indexes($a);$k=fields($a);$dc=column_foreign_keys($a);$Ld=$R["Oid"];$ca=get_settings("adminer_import");$Ee=array();$d=array();$Ie=array();$Td=array();$mf="";foreach($k
as$v=>$j){$B=adminer()->fieldName($j);$Dd=html_entity_decode(strip_tags($B),ENT_QUOTES);if(isset($j["privileges"]["select"])&&$B!=""){$d[$v]=$Dd;if(is_shortable($j))$mf=adminer()->selectLengthProcess();}if(isset($j["privileges"]["where"])&&$B!="")$Ie[$v]=$Dd;if(isset($j["privileges"]["order"])&&$B!="")$Td[$v]=$Dd;$Ee+=$j["privileges"];}list($M,$p)=adminer()->selectColumnsProcess($d,$u);$M=array_unique($M);$p=array_unique($p);$Qc=count($p)<count($M);$Z=adminer()->selectSearchProcess($k,$u);$D=adminer()->selectOrderProcess($k,$u);$w=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Ff=>$K){$ja=convert_field($k[key($K)]);$M=array($ja?:idf_escape(key($K)));$Z[]=where_check($Ff,$k);$J=driver()->select($a,$M,$Z,$M);if($J)echo
first($J->fetch_row());}exit;}$oe=$Hf=array();foreach($u
as$t){if($t["type"]=="PRIMARY"){$oe=array_flip($t["columns"]);$Hf=($M?$oe:array());foreach($Hf
as$v=>$W){if(in_array(idf_escape($v),$M))unset($Hf[$v]);}break;}}if($Ld&&!$oe){$oe=$Hf=array($Ld=>0);$u[]=array("type"=>"PRIMARY","columns"=>array($Ld));}if($_POST&&!$i){$Zf=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Ga=array();foreach($_POST["check"]as$Ea)$Ga[]=where_check($Ea,$k);$Zf[]="((".implode(") OR (",$Ga)."))";}$Zf=($Zf?"\nWHERE ".implode(" AND ",$Zf):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$fc=($M?implode(", ",$M):"*").convert_fields($d,$k,$M)."\nFROM ".table($a);$lc=($p&&$Qc?"\nGROUP BY ".implode(", ",$p):"").($D?"\nORDER BY ".implode(", ",$D):"");$H="SELECT $fc$Zf$lc";if(is_array($_POST["check"])&&!$oe){$Df=array();foreach($_POST["check"]as$W)$Df[]="(SELECT".limit($fc,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$k).$lc,1).")";$H=implode(" UNION ALL ",$Df);}adminer()->dumpData($a,"table",$H);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$dc)){if($_POST["save"]||$_POST["delete"]){$I=true;$da=0;$O=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$B=>$W){$W=process_input($k[$B]);if($W!==null&&($_POST["clone"]||$W!==false))$O[idf_escape($B)]=($W!==false?$W:idf_escape($B));}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($oe&&is_array($_POST["check"]))||$Qc){$I=($_POST["delete"]?driver()->delete($a,$Zf):($_POST["clone"]?queries("INSERT $H$Zf".driver()->insertReturning($a)):driver()->update($a,$O,$Zf)));$da=connection()->affected_rows;if(is_object($I))$da+=$I->num_rows;}else{foreach((array)$_POST["check"]as$W){$Yf="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$k);$I=($_POST["delete"]?driver()->delete($a,$Yf,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$Yf)):driver()->update($a,$O,$Yf,1)));if(!$I)break;$da+=connection()->affected_rows;}}}$_=lang_format(array('%d item has been affected.','%d items have been affected.'),$da);if($_POST["clone"]&&$I&&$da==1){$dd=last_id($I);if($dd)$_=sprintf('Item%s has been inserted.'," $dd");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$_,$I);if(!$_POST["delete"]){$le=(array)$_POST["fields"];edit_form($a,array_intersect_key($k,$le),$le,!$_POST["clone"],$i);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$i='Ctrl+click on a value to modify it.';else{$I=true;$da=0;foreach($_POST["val"]as$Ff=>$K){$O=array();foreach($K
as$v=>$W){$v=bracket_escape($v,true);$O[idf_escape($v)]=(preg_match('~char|text~',$k[$v]["type"])||$W!=""?adminer()->processInput($k[$v],$W):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Ff,$k),($Qc||$oe?0:1)," ");if(!$I)break;$da+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang_format(array('%d item has been affected.','%d items have been affected.'),$da),$I);}}elseif(!is_string($Sb=get_file("csv_file",true)))$i=upload_error($Sb);elseif(!preg_match('~~u',$Sb))$i='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$ca["output"],"format"=>$_POST["separator"]),"adminer_import");$I=true;$Oa=array_keys($k);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Sb,$nd);$da=count($nd[0]);driver()->begin();$Ne=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$L=array();foreach($nd[0]as$v=>$W){preg_match_all("~((?>\"[^\"]*\")+|[^$Ne]*)$Ne~",$W.$Ne,$od);if(!$v&&!array_diff($od[1],$Oa)){$Oa=$od[1];$da--;}else{$O=array();foreach($od[1]as$q=>$La)$O[idf_escape($Oa[$q])]=($La==""&&$k[$Oa[$q]]["null"]?"NULL":q(preg_match('~^".*"$~s',$La)?str_replace('""','"',substr($La,1,-1)):$La));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$oe));if($I)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d row has been imported.','%d rows have been imported.'),$da),$I);driver()->rollback();}}}$jf=adminer()->tableName($R);if(is_ajax()){page_headers();ob_start();}else
page_header('Select'.": $jf",$i);$O=null;if(isset($Ee["insert"])||!support("table")){$ae=array();foreach((array)$_GET["where"]as$W){if(isset($dc[$W["col"]])&&count($dc[$W["col"]])==1&&($W["op"]=="="||(!$W["op"]&&(is_array($W["val"])||!preg_match('~[_%]~',$W["val"])))))$ae["set"."[".bracket_escape($W["col"])."]"]=$W["val"];}$O=$ae?"&".http_build_query($ae):"";}adminer()->selectLinks($R,$O);if(!$d&&support("table"))echo"<p class='error'>".'Unable to select the table'.($k?".":": ".error())."\n";else{echo"<form action='' id='form'>\n","<div style='display: none;'>";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"</div>\n";adminer()->selectColumnsPrint($M,$d);adminer()->selectSearchPrint($Z,$Ie,$u);adminer()->selectOrderPrint($D,$Td,$u);adminer()->selectLimitPrint($w);adminer()->selectLengthPrint($mf);adminer()->selectActionPrint($u);echo"</form>\n";$E=$_GET["page"];$m=null;if($E=="last"){$m=get_val(count_rows($a,$Z,$Qc,$p));$E=floor(max(0,intval($m)-1)/$w);}$Je=$M;$kc=$p;if(!$Je){$Je[]="*";$Va=convert_fields($d,$k,$M);if($Va)$Je[]=substr($Va,2);}foreach($M
as$v=>$W){$j=$k[idf_unescape($W)];if($j&&($ja=convert_field($j)))$Je[$v]="$ja AS $W";}if(!$Qc&&$Hf){foreach($Hf
as$v=>$W){$Je[]=idf_escape($v);if($kc)$kc[]=idf_escape($v);}}$I=driver()->select($a,$Je,$Z,$kc,$D,$w,$E,true);if(!$I)echo"<p class='error'>".error()."\n";else{if(JUSH=="mssql"&&$E)$I->seek($w*$E);$zb=array();echo"<form action='' method='post' enctype='multipart/form-data'>\n";$L=array();while($K=$I->fetch_assoc()){if($E&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}if($_GET["page"]!="last"&&$w&&$p&&$Qc&&JUSH=="sql")$m=get_val(" SELECT FOUND_ROWS()");if(!$L)echo"<p class='message'>".'No rows.'."\n";else{$ta=adminer()->backwardKeys($a,$jf);echo"<div class='scrollable'>","<table id='table' class='nowrap checkable odds'>",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"<thead><tr>".(!$p&&$M?"":"<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>");$Ed=array();$hc=array();reset($M);$xe=1;foreach($L[0]as$v=>$W){if(!isset($Hf[$v])){$W=idx($_GET["columns"],key($M))?:array();$j=$k[$M?($W?$W["col"]:current($M)):$v];$B=($j?adminer()->fieldName($j,$xe):($W["fun"]?"*":h($v)));if($B!=""){$xe++;$Ed[$v]=$B;$c=idf_escape($v);$zc=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($v);$lb="&desc%5B0%5D=1";echo"<th id='th[".h(bracket_escape($v))."]'>".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$gc=apply_sql_function($W["fun"],$B);$Ve=isset($j["privileges"]["order"])||$gc!=$B;echo($Ve?"<a href='".h($zc.($D[0]==$c||$D[0]==$v?$lb:''))."'>$gc</a>":$gc);$wd=($Ve?"<a href='".h($zc.$lb)."' title='".'descending'."' class='text'> ↓</a>":'');if(!$W["fun"]&&isset($j["privileges"]["where"])){$wd
.='<a href="#fieldset-search" title="'.'Search'.'" class="text jsonly"> =</a>';$wd
.=script("qsl('a').onclick = partial(selectSearch, '".js_escape($v)."');");}echo($wd?"<span class='column hidden'>$wd</span>":"");}$hc[$v]=$W["fun"];next($M);}}$gd=array();if($_GET["modify"]){foreach($L
as$K){foreach($K
as$v=>$W)$gd[$v]=max($gd[$v],min(40,strlen(utf8_decode($W))));}}echo($ta?"<th>".'Relations':"")."</thead>\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$dc)as$A=>$K){$Ef=unique_array($L[$A],$u);if(!$Ef){$Ef=array();reset($M);foreach($L[$A]as$v=>$W){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($M)))$Ef[$v]=$W;next($M);}}$Ff="";foreach($Ef
as$v=>$W){$j=(array)$k[$v];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$j["type"])&&strlen($W)>64){$v=(strpos($v,'(')?$v:idf_escape($v));$v="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$j["collation"])?$v:"CONVERT($v USING ".charset(connection()).")").")";$W=md5($W);}$Ff
.="&".($W!==null?urlencode("where[".bracket_escape($v)."]")."=".urlencode($W===false?"f":$W):"null%5B%5D=".urlencode($v));}echo"<tr>".(!$p&&$M?"":"<td>".checkbox("check[]",substr($Ff,1),in_array(substr($Ff,1),(array)$_POST["check"])).($Qc||information_schema(DB)?"":" <a href='".h(ME."edit=".urlencode($a).$Ff)."' class='edit'>".'edit'."</a>"));reset($M);foreach($K
as$v=>$W){if(isset($Ed[$v])){$c=current($M);$j=(array)$k[$v];if($W!=""&&(!isset($zb[$v])||$zb[$v]!=""))$zb[$v]=(is_mail($W)?$Ed[$v]:"");$x="";if(is_blob($j)&&$W!="")$x=ME.'download='.urlencode($a).'&field='.urlencode($v).$Ff;if(!$x&&$W!==null){foreach((array)$dc[$v]as$cc){if(count($dc[$v])==1||end($cc["source"])==$v){$x="";foreach($cc["source"]as$q=>$We)$x
.=where_link($q,$cc["target"][$q],$L[$A][$We]);$x=($cc["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($cc["db"]),ME):ME).'select='.urlencode($cc["table"]).$x;if($cc["ns"])$x=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($cc["ns"]),$x);if(count($cc["source"])==1)break;}}}if($c=="COUNT(*)"){$x=ME."select=".urlencode($a);$q=0;foreach((array)$_GET["where"]as$V){if(!array_key_exists($V["col"],$Ef))$x
.=where_link($q++,$V["col"],$V["val"],$V["op"]);}foreach($Ef
as$Wc=>$V)$x
.=where_link($q++,$Wc,$V);}$_c=select_value($W,$x,$j,$mf);$r=h("val[$Ff][".bracket_escape($v)."]");$me=idx(idx($_POST["val"],$Ff),bracket_escape($v));$vb=!is_array($K[$v])&&is_utf8($_c)&&$L[$A][$v]==$K[$v]&&!$hc[$v]&&!$j["generated"];$T=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$c,$z)?$k[idf_unescape($z[2])]["type"]:$j["type"]);$lf=preg_match('~text|json|lob~',$T);$Rc=preg_match(number_type(),$T)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$c);echo"<td id='$r'".($Rc&&($W===null||is_numeric(strip_tags($_c))||$T=="money")?" class='number'":"");if(($_GET["modify"]&&$vb&&$W!==null)||$me!==null){$nc=h($me!==null?$me:$K[$v]);echo">".($lf?"<textarea name='$r' cols='30' rows='".(substr_count($K[$v],"\n")+1)."'>$nc</textarea>":"<input name='$r' value='$nc' size='$gd[$v]'>");}else{$jd=strpos($_c,"<i>…</i>");echo" data-text='".($jd?2:($lf?1:0))."'".($vb?"":" data-warning='".h('Use edit link to modify this value.')."'").">$_c";}}next($M);}if($ta)echo"<td>";adminer()->backwardKeysPrint($ta,$L[$A]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($L||$E){$Ib=true;if($_GET["page"]!="last"){if(!$w||(count($L)<$w&&($L||!$E)))$m=($E?$E*$w:0)+count($L);elseif(JUSH!="sql"||!$Qc){$m=($Qc?false:found_rows($R,$Z));if(intval($m)<max(1e4,2*($E+1)*$w))$m=first(slow_query(count_rows($a,$Z,$Qc,$p)));elseif(JUSH=='sql'||JUSH=='pgsql')$Ib=false;}}$Yd=($w&&($m===false||$m>$w||$E));if($Yd)echo(($m===false?count($L)+1:$m-$E*$w)>$w?'<p><a href="'.h(remove_from_uri("page")."&page=".($E+1)).'" class="loadmore">'.'Load more data'.'</a>'.script("qsl('a').onclick = partial(selectLoadMore, $w, '".'Loading'."…');",""):''),"\n";echo"<div class='footer'><div>\n";if($Yd){$rd=($m===false?$E+(count($L)>=$w?2:1):floor(($m-1)/$w));echo"<fieldset>";if(JUSH!="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($q=max(1,$E-4);$q<min($rd,$E+5);$q++)echo
pagination($q,$E);if($rd>0)echo($E+5<$rd?" …":""),($Ib&&$m!==false?pagination($rd,$E):" <a href='".h(remove_from_uri("page")."&page=last")."' title='~$rd'>".'last'."</a>");}else
echo"<legend>".'Page'."</legend>",pagination(0,$E).($E>1?" …":""),($E?pagination($E,$E):""),($rd>$E?pagination($E+1,$E).($rd>$E+1?" …":""):"");echo"</fieldset>\n";}echo"<fieldset>","<legend>".'Whole result'."</legend>";$pb=($Ib?"":"~ ").$m;$Od="const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$pb' : checked); selectCount('selected2', this.checked || !checked ? '$pb' : checked);";echo
checkbox("all",1,0,($m!==false?($Ib?"":"~ ").lang_format(array('%d row','%d rows'),$m):""),$Od)."\n","</fieldset>\n";if(adminer()->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>
';$ec=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$c){if($c["fun"]){unset($ec['sql']);break;}}if($ec){print_fieldset("export",'Export'." <span id='selected2'></span>");$Wd=adminer()->dumpOutput();echo($Wd?html_select("output",$Wd,$ca["output"])." ":""),html_select("format",$ec,$ca["format"])," <input type='submit' name='export' value='".'Export'."'>\n","</div></fieldset>\n";}adminer()->selectEmailPrint(array_filter($zb,'strlen'),$d);echo"</div></div>\n";}if(adminer()->selectImportPrint())echo"<p>","<a href='#import'>".'Import'."</a>",script("qsl('a').onclick = partial(toggle, 'import');",""),"<span id='import'".($_POST["import"]?"":" class='hidden'").">: ",file_input("<input type='file' name='csv_file'> ".html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$ca["format"])." <input type='submit' name='import' value='".'Import'."'>"),"</span>";echo
input_token(),"</form>\n",(!$p&&$M?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["script"])){if($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));elseif(list($Q,$r,$B)=adminer()->_foreignColumn(column_foreign_keys($_GET["source"]),$_GET["field"])){$w=11;$I=connection()->query("SELECT $r, $B FROM ".table($Q)." WHERE ".(preg_match('~^[0-9]+$~',$_GET["value"])?"$r = $_GET[value] OR ":"")."$B LIKE ".q("$_GET[value]%")." ORDER BY 2 LIMIT $w");for($q=1;($K=$I->fetch_row())&&$q<$w;$q++)echo"<a href='".h(ME."edit=".urlencode($Q)."&where".urlencode("[".bracket_escape(idf_unescape($r))."]")."=".urlencode($K[0]))."'>".h($K[1])."</a><br>\n";if($K)echo"...\n";}exit;}else{page_header('Server',"",false);if(adminer()->homepage()){echo"<form action='' method='post'>\n","<p>".'Search data in tables'.": <input type='search' name='query' value='".h($_POST["query"])."'> <input type='submit' value='".'Search'."'>\n";if($_POST["query"]!="")search_tables();echo"<div class='scrollable'>\n","<table class='nowrap checkable odds'>\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\[/);",""),'<th>'.'Table','<td>'.'Rows',"</thead>\n";foreach(table_status()as$Q=>$K){$B=adminer()->tableName($K);if($B!=""){echo'<tr><td>'.checkbox("tables[]",$Q,in_array($Q,(array)$_POST["tables"],true)),"<th><a href='".h(ME).'select='.urlencode($Q)."'>$B</a>";$W=format_number($K["Rows"]);echo"<td align='right'><a href='".h(ME."edit=").urlencode($Q)."'>".($K["Engine"]=="InnoDB"&&$W?"~ $W":$W)."</a>";}}echo"</table>\n","</div>\n","</form>\n",script("tableCheck();");adminer()->pluginsLinks();}}page_footer();