/** Adminer - Compact database management* @link https://www.adminer.org/* @author Jakub Vrana, https://www.vrana.cz/* @copyright 2007 Jakub Vrana* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)* @version 4.7.6*/error_reporting(6135);$Zc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Zc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Li=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Li)$$X=$Li;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");functionconnection(){global$h;return$h;}functionadminer(){global$b;return$b;}functionversion(){global$ia;return$ia;}functionidf_unescape($u){$se=substr($u,-1);returnstr_replace($se.$se,$se,substr($u,1,-1));}functionescape_string($X){returnsubstr(q($X),1,-1);}functionnumber($X){returnpreg_replace('~[^0-9]+~','',$X);}functionnumber_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}functionremove_slashes($vg,$Zc=false){if(get_magic_quotes_gpc()){while(list($y,$X)=each($vg)){foreach($Xas$he=>$W){unset($vg[$y][$he]);if(is_array($W)){$vg[$y][stripslashes($he)]=$W;$vg[]=&$vg[$y][stripslashes($he)];}else$vg[$y][stripslashes($he)]=($Zc?$W:stripslashes($W));}}}}functionbracket_escape($u,$Pa=false){static$xi=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');returnstrtr($u,($Pa?array_flip($xi):$xi));}functionmin_version($dj,$Ge="",$i=null){global$h;if(!$i)$i=$h;$qh=$i->server_info;if($Ge&&preg_match('~([\d.]+)-MariaDB~',$qh,$A)){$qh=$A[1];$dj=$Ge;}return(version_compare($qh,$dj)>=0);}functioncharset($h){return(min_version("5.5.3",0,$h)?"utf8mb4":"utf8");}functionscript($Ah,$wi="\n"){return"<script".nonce().">$Ah</script>$wi";}functionscript_src($Qi){return"<script src='".h($Qi)."'".nonce()."></script>\n";}functionnonce(){return' nonce="'.get_nonce().'"';}functiontarget_blank(){return' target="_blank" rel="noreferrer noopener"';}functionh($P){returnstr_replace("\0","�",htmlspecialchars($P,ENT_QUOTES,'utf-8'));}functionnl_br($P){returnstr_replace("\n","
",$P);}functioncheckbox($B,$Y,$gb,$oe="",$xf="",$lb="",$pe=""){$H="<input type='checkbox' name='$B' value='".h($Y)."'".($gb?" checked":"").($pe?" aria-labelledby='$pe'":"").">".($xf?script("qsl('input').onclick = function () { $xf };",""):"");return($oe!=""||$lb?"<label".($lb?" class='$lb'":"").">$H".h($oe)."</label>":$H);}functionoptionlist($Cf,$kh=null,$Vi=false){$H="";foreach($Cfas$he=>$W){$Df=array($he=>$W);if(is_array($W)){$H.='<optgroup label="'.h($he).'">';$Df=$W;}foreach($Dfas$y=>$X)$H.='<option'.($Vi||is_string($y)?' value="'.h($y).'"':'').(($Vi||is_string($y)?(string)$y:$X)===$kh?' selected':'').'>'.h($X);if(is_array($W))$H.='</optgroup>';}return$H;}functionhtml_select($B,$Cf,$Y="",$wf=true,$pe=""){if($wf)return"<select name='".h($B)."'".($pe?" aria-labelledby='$pe'":"").">".optionlist($Cf,$Y)."</select>".(is_string($wf)?script("qsl('select').onchange = function () { $wf };",""):"");$H="";foreach($Cfas$y=>$X)$H.="<label><input type='radio' name='".h($B)."' value='".h($y)."'".($y==$Y?" checked":"").">".h($X)."</label>";return$H;}functionselect_input($Ka,$Cf,$Y="",$wf="",$hg=""){$bi=($Cf?"select":"input");return"<$bi$Ka".($Cf?"><option value=''>$hg".optionlist($Cf,$Y,true)."</select>":" size='10' value='".h($Y)."' placeholder='$hg'>").($wf?script("qsl('$bi').onchange = $wf;",""):"");}functionconfirm($Qe="",$lh="qsl('input')"){returnscript("$lh.onclick = function () { return confirm('".($Qe?js_escape($Qe):lang(0))."'); };","");}functionprint_fieldset($t,$xe,$gj=false){echo"<fieldset><legend>","<a href='#fieldset-$t'>$xe</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$t');",""),"</legend>","<div id='fieldset-$t'".($gj?"":" class='hidden'").">\n";}functionbold($Xa,$lb=""){return($Xa?" class='active $lb'":($lb?" class='$lb'":""));}functionodd($H=' class="odd"'){static$s=0;if(!$H)$s=-1;return($s++%2?$H:'');}functionjs_escape($P){returnaddcslashes($P,"\r\n'\\/");}functionjson_row($y,$X=null){static$ad=true;if($ad)echo"{";if($y!=""){echo($ad?"":",")."\n\t\"".addcslashes($y,"\r\n\t\"\\/").'": '.($X!==null?'"'.addcslashes($X,"\r\n\"\\/").'"':'null');$ad=false;}else{echo"\n}\n";$ad=true;}}functionini_bool($Ud){$X=ini_get($Ud);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}functionsid(){static$H;if($H===null)$H=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$H;}functionset_password($cj,$M,$V,$E){$_SESSION["pwds"][$cj][$M][$V]=($_COOKIE["adminer_key"]&&is_string($E)?array(encrypt_string($E,$_COOKIE["adminer_key"])):$E);}functionget_password(){$H=get_session("pwds");if(is_array($H))$H=($_COOKIE["adminer_key"]?decrypt_string($H[0],$_COOKIE["adminer_key"]):false);return$H;}functionq($P){global$h;return$h->quote($P);}functionget_vals($F,$e=0){global$h;$H=array();$G=$h->query($F);if(is_object($G)){while($I=$G->fetch_row())$H[]=$I[$e];}return$H;}functionget_key_vals($F,$i=null,$th=true){global$h;if(!is_object($i))$i=$h;$H=array();$G=$i->query($F);if(is_object($G)){while($I=$G->fetch_row()){if($th)$H[$I[0]]=$I[1];else$H[]=$I[0];}}return$H;}functionget_rows($F,$i=null,$n="<p class='error'>"){global$h;$zb=(is_object($i)?$i:$h);$H=array();$G=$zb->query($F);if(is_object($G)){while($I=$G->fetch_assoc())$H[]=$I;}elseif(!$G&&!is_object($i)&&$n&&defined("PAGE_HEADER"))echo$n.error()."\n";return$H;}functionunique_array($I,$w){foreach($was$v){if(preg_match("~PRIMARY|UNIQUE~",$v["type"])){$H=array();foreach($v["columns"]as$y){if(!isset($I[$y]))continue2;$H[$y]=$I[$y];}return$H;}}}functionescape_key($y){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$y,$A))return$A[1].idf_escape(idf_unescape($A[2])).$A[3];returnidf_escape($y);}functionwhere($Z,$p=array()){global$h,$x;$H=array();foreach((array)$Z["where"]as$y=>$X){$y=bracket_escape($y,1);$e=escape_key($y);$H[]=$e.($x=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):($x=="mssql"?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($p[$y],q($X))));if($x=="sql"&&preg_match('~char|text~',$p[$y]["type"])&&preg_match("~[^ -@]~",$X))$H[]="$e = ".q($X)." COLLATE ".charset($h)."_bin";}foreach((array)$Z["null"]as$y)$H[]=escape_key($y)." IS NULL";returnimplode(" AND ",$H);}functionwhere_check($X,$p=array()){parse_str($X,$eb);remove_slashes(array(&$eb));returnwhere($eb,$p);}functionwhere_link($s,$e,$Y,$zf="="){return"&where%5B$s%5D%5Bcol%5D=".urlencode($e)."&where%5B$s%5D%5Bop%5D=".urlencode(($Y!==null?$zf:"IS NULL"))."&where%5B$s%5D%5Bval%5D=".urlencode($Y);}functionconvert_fields($f,$p,$K=array()){$H="";foreach($fas$y=>$X){if($K&&!in_array(idf_escape($y),$K))continue;$Ha=convert_field($p[$y]);if($Ha)$H.=", $Ha AS ".idf_escape($y);}return$H;}functioncookie($B,$Y,$_e=2592000){global$ba;returnheader("Set-Cookie: $B=".urlencode($Y).($_e?"; expires=".gmdate("D, d M Y H:i:s",time()+$_e)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).($ba?"; secure":"")."; HttpOnly; SameSite=lax",false);}functionrestart_session(){if(!ini_bool("session.use_cookies"))session_start();}functionstop_session($fd=false){$Ui=ini_bool("session.use_cookies");if(!$Ui||$fd){session_write_close();if($Ui&&@ini_set("session.use_cookies",false)===false)session_start();}}function&get_session($y){return$_SESSION[$y][DRIVER][SERVER][$_GET["username"]];}functionset_session($y,$X){$_SESSION[$y][DRIVER][SERVER][$_GET["username"]]=$X;}functionauth_url($cj,$M,$V,$l=null){global$ic;preg_match('~([^?]*)\??(.*)~',remove_from_uri(implode("|",array_keys($ic))."|username|".($l!==null?"db|":"").session_name()),$A);return"$A[1]?".(sid()?SID."&":"").($cj!="server"||$M!=""?urlencode($cj)."=".urlencode($M)."&":"")."username=".urlencode($V).($l!=""?"&db=".urlencode($l):"").($A[2]?"&$A[2]":"");}functionis_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}functionredirect($Be,$Qe=null){if($Qe!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Be!==null?$Be:$_SERVER["REQUEST_URI"]))][]=$Qe;}if($Be!==null){if($Be=="")$Be=".";header("Location: $Be");exit;}}functionquery_redirect($F,$Be,$Qe,$Gg=true,$Gc=true,$Rc=false,$ji=""){global$h,$n,$b;if($Gc){$Ih=microtime(true);$Rc=!$h->query($F);$ji=format_time($Ih);}$Dh="";if($F)$Dh=$b->messageQuery($F,$ji,$Rc);if($Rc){$n=error().$Dh.script("messagesPrint();");returnfalse;}if($Gg)redirect($Be,$Qe.$Dh);returntrue;}functionqueries($F){global$h;static$_g=array();static$Ih;if(!$Ih)$Ih=microtime(true);if($F===null)returnarray(implode("\n",$_g),format_time($Ih));$_g[]=(preg_match('~;$~',$F)?"DELIMITER ;;\n$F;\nDELIMITER ":$F).";";return$h->query($F);}functionapply_queries($F,$S,$Cc='table'){foreach($Sas$Q){if(!queries("$F ".$Cc($Q)))returnfalse;}returntrue;}functionqueries_redirect($Be,$Qe,$Gg){list($_g,$ji)=queries(null);returnquery_redirect($_g,$Be,$Qe,$Gg,false,!$Gg,$ji);}functionformat_time($Ih){returnlang(1,max(0,microtime(true)-$Ih));}functionremove_from_uri($Sf=""){returnsubstr(preg_replace("~(?<=[?&])($Sf".(SID?"":"|".session_name()).")=[^&]*&~",'',"$_SERVER[REQUEST_URI]&"),0,-1);}functionpagination($D,$Nb){return" ".($D==$Nb?$D+1:'<a href="'.h(remove_from_uri("page").($D?"&page=$D".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($D+1)."</a>");}functionget_file($y,$Vb=false){$Xc=$_FILES[$y];if(!$Xc)returnnull;foreach($Xcas$y=>$X)$Xc[$y]=(array)$X;$H='';foreach($Xc["error"]as$y=>$n){if($n)return$n;$B=$Xc["name"][$y];$ri=$Xc["tmp_name"][$y];$Bb=file_get_contents($Vb&&preg_match('~\.gz$~',$B)?"compress.zlib://$ri":$ri);if($Vb){$Ih=substr($Bb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Ih,$Mg))$Bb=iconv("utf-16","utf-8",$Bb);elseif($Ih=="\xEF\xBB\xBF")$Bb=substr($Bb,3);$H.=$Bb."\n\n";}else$H.=$Bb;}return$H;}functionupload_error($n){$Ne=($n==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($n?lang(2).($Ne?" ".lang(3,$Ne):""):lang(4));}functionrepeat_pattern($fg,$ye){returnstr_repeat("$fg{0,65535}",$ye/65535)."$fg{0,".($ye%65535)."}";}functionis_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}functionshorten_utf8($P,$ye=80,$Ph=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$ye).")($)?)u",$P,$A))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$ye).")($)?)",$P,$A);returnh($A[1]).$Ph.(isset($A[2])?"":"<i>…</i>");}functionformat_number($X){returnstrtr(number_format($X,0,".",lang(5)),preg_split('~~u',lang(6),-1,PREG_SPLIT_NO_EMPTY));}functionfriendly_url($X){returnpreg_replace('~[^a-z0-9_]~i','-',$X);}functionhidden_fields($vg,$Jd=array()){$H=false;while(list($y,$X)=each($vg)){if(!in_array($y,$Jd)){if(is_array($X)){foreach($Xas$he=>$W)$vg[$y."[$he]"]=$W;}else{$H=true;echo'';}}}return$H;}functionhidden_fields_get(){echo(sid()?'':''),(SERVER!==null?'':""),'';}functiontable_status1($Q,$Sc=false){$H=table_status($Q,$Sc);return($H?$H:array("Name"=>$Q));}functioncolumn_foreign_keys($Q){global$b;$H=array();foreach($b->foreignKeys($Q)as$q){foreach($q["source"]as$X)$H[$X][]=$q;}return$H;}functionenum_input($T,$Ka,$o,$Y,$xc=null){global$b;preg_match_all("~'((?:[^']|'')*)'~",$o["length"],$Ie);$H=($xc!==null?"<label><input type='$T'$Ka value='$xc'".((is_array($Y)?in_array($xc,$Y):$Y===0)?" checked":"")."><i>".lang(7)."</i></label>":"");foreach($Ie[1]as$s=>$X){$X=stripcslashes(str_replace("''","'",$X));$gb=(is_int($Y)?$Y==$s+1:(is_array($Y)?in_array($s+1,$Y):$Y===$X));$H.=" <label><input type='$T'$Ka value='".($s+1)."'".($gb?' checked':'').'>'.h($b->editVal($X,$o)).'</label>';}return$H;}functioninput($o,$Y,$r){global$U,$b,$x;$B=h(bracket_escape($o["field"]));echo"<td class='function'>";if(is_array($Y)&&!$r){$Fa=array($Y);if(version_compare(PHP_VERSION,5.4)>=0)$Fa[]=JSON_PRETTY_PRINT;$Y=call_user_func_array('json_encode',$Fa);$r="json";}$Qg=($x=="mssql"&&$o["auto_increment"]);if($Qg&&!$_POST["save"])$r=null;$od=(isset($_GET["select"])||$Qg?array("orig"=>lang(8)):array())+$b->editFunctions($o);$Ka=" name='fields[$B]'";if($o["type"]=="enum")echoh($od[""])."