#!/bin/bash
# Guardian — instalador do HUB CENTRAL (roda no cPanel guardianmind, SEM root)
set -e
PHPBIN="$(command -v php || command -v php8.3 || command -v php8.2 || echo /usr/local/bin/php)"
echo "PHP: $PHPBIN"; "$PHPBIN" -v >/dev/null 2>&1 || { echo "ERRO: php CLI nao encontrado"; exit 1; }
CODE="$HOME/guardian"; WEB="$HOME/public_html/guardian"
mkdir -p "$CODE/data" "$WEB"; chmod 700 "$CODE/data"
base64 -d > "$CODE/targets.php" <<'B64_targets.php'
PD9waHAKLy8gR3VhcmRpYW4g4oCUIGFsdm9zIG1vbml0b3JhZG9zIChjZW50cm86IEEgSW50ZXIg
LyBndWFyZGlhbm1pbmQpCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwpyZXR1cm4gWwogICAgJ21l
dGEnICA9PiBbJ2NlbnRlcicgPT4gJ0EgSW50ZXIgwrcgZ3VhcmRpYW5taW5kJ10sCiAgICAnYWxl
cnQnID0+IFsKICAgICAgICAndG8nICAgICAgID0+ICdnb25jYWx2ZXMuam9zZUBvdXRsb29rLmNv
bSxqb2FvQG1pbmRjb25zdWx0aW5nLmNvbS5icicsCiAgICAgICAgJ2Zyb20nICAgICA9PiAnZ3Vh
cmRpYW5AbWluZGNvbnN1bHRpbmcuY29tLmJyJywKICAgICAgICAnY29vbGRvd24nID0+IDE4MDAs
IC8vIHMgZW50cmUgYWxlcnRhcyBkbyBtZXNtbyBhbHZvCiAgICBdLAogICAgLy8gcG9ydHM6IHBv
cnRhcyBhIHRlc3RhciAoVENQKS4gaHR0cHM6IFVSTCBwYXJhIGNoZWNhciBjw7NkaWdvIEhUVFAu
CiAgICAvLyB3aG0udG9rZW46IG9wY2lvbmFsIOKAlCBzZSBwcmVlbmNoaWRvLCBvIGh1YiBwdXhh
IGxvYWQvc2VydmnDp29zIHZpYSBBUEkgZG8gV0hNLgogICAgJ3RhcmdldHMnID0+IFsKICAgICAg
ICBbJ25hbWUnID0+ICdBIEludGVyJywgICAgICdncm91cCcgPT4gJ1dITScsICAgICAgICAgICAg
J2lwJyA9PiAnMTYyLjIxNS4xMC43MCcsICdwb3J0cycgPT4gWzIwODcsMjA4Myw4MCw0NDMsMjJd
LCAnaHR0cHMnID0+ICdodHRwczovLzE2Mi4yMTUuMTAuNzA6MjA4Ny8nLCAnd2htJyA9PiBbJ3Vz
ZXInID0+ICdyb290JywgJ3Rva2VuJyA9PiAnJ11dLAogICAgICAgIFsnbmFtZScgPT4gJ1RVU0NB
JywgICAgICAgJ2dyb3VwJyA9PiAnV0hNJywgICAgICAgICAgICAnaXAnID0+ICcxNjIuMjE1Ljku
MTU4JywgJ3BvcnRzJyA9PiBbMjA4NywyMDgzLDgwLDQ0MywyMl0sICdodHRwcycgPT4gJ2h0dHBz
Oi8vMTYyLjIxNS45LjE1ODoyMDg3LycsICd3aG0nID0+IFsndXNlcicgPT4gJ3Jvb3QnLCAndG9r
ZW4nID0+ICcnXV0sCiAgICAgICAgWyduYW1lJyA9PiAnSG9zdGluZ2VyJywgICAnZ3JvdXAnID0+
ICdWUFMnLCAgICAgICAgICAgICdpcCcgPT4gJzkzLjEyNy4yMDkuMTE4JywncG9ydHMnID0+IFs4
MCw0NDMsMjJdXSwKICAgICAgICBbJ25hbWUnID0+ICd0b3JyYScsICAgICAgICdncm91cCcgPT4g
J0FXUyB1cy1lYXN0LTEnLCAgJ2lwJyA9PiAnMy4yMTEuMzcuMjMnLCAgICdwb3J0cycgPT4gWzgw
LDQ0MywyMl1dLAogICAgICAgIFsnbmFtZScgPT4gJ2xhd3JhJywgICAgICAgJ2dyb3VwJyA9PiAn
QVdTIHVzLWVhc3QtMScsICAnaXAnID0+ICc1NC4xNDQuMjcuMTg4JywgJ3BvcnRzJyA9PiBbODAs
NDQzLDIyXV0sCiAgICAgICAgWyduYW1lJyA9PiAnOS4wLXNvbHVjb2VzJywnZ3JvdXAnID0+ICdB
V1MgdXMtZWFzdC0xJywgICdpcCcgPT4gJzUyLjg2LjE1My42NycsICAncG9ydHMnID0+IFs4MCw0
NDMsMjJdXSwKICAgICAgICBbJ25hbWUnID0+ICdwYXN0b3JlJywgICAgICdncm91cCcgPT4gJ0FX
UyB1cy1lYXN0LTEnLCAgJ2lwJyA9PiAnNTQuMTYyLjU2LjI2JywgICdwb3J0cycgPT4gWzgwLDQ0
MywyMl1dLAogICAgICAgIFsnbmFtZScgPT4gJ3Byb2xpdGlzLWFwaScsJ2dyb3VwJyA9PiAnQVdT
IHVzLWVhc3QtMScsICAnaXAnID0+ICc0NC4yMTMuNjguMjcnLCAgJ3BvcnRzJyA9PiBbODAsNDQz
LDIyXV0sCiAgICAgICAgWyduYW1lJyA9PiAndmVydHV6JywgICAgICAnZ3JvdXAnID0+ICdBV1Mg
c2EtZWFzdC0xJywgICdpcCcgPT4gJzE3Ny43MS4yNTMuMjA1JywncG9ydHMnID0+IFs4MCw0NDMs
MjJdXSwKICAgICAgICBbJ25hbWUnID0+ICdMaWNlc3BvdCcsICAgICdncm91cCcgPT4gJ0FXUyBz
YS1lYXN0LTEnLCAgJ2lwJyA9PiAnNTQuOTQuMTk2LjEwJywgICdwb3J0cycgPT4gWzgwLDQ0Mywy
Ml1dLAogICAgICAgIFsnbmFtZScgPT4gJ2Zpc2snLCAgICAgICAgJ2dyb3VwJyA9PiAnQVdTIHNh
LWVhc3QtMScsICAnaXAnID0+ICcxOC4yMzAuMi4yNTQnLCAgJ3BvcnRzJyA9PiBbODAsNDQzLDIy
XV0sCiAgICBdLApdOwo=
B64_targets.php
base64 -d > "$CODE/probe.php" <<'B64_probe.php'
PD9waHAKLyoqCiAqIEd1YXJkaWFuIOKAlCBjb2xldG9yIGNlbnRyYWwgKHJvZGEgbm8gZ3VhcmRp
YW5taW5kLCBzZW0gcm9vdCkuCiAqIFBhcmEgY2FkYSBhbHZvOiBwb3J0YXMgVENQLCBIVFRQIChj
w7NkaWdvK2xhdMOqbmNpYSksIHZhbGlkYWRlIGRvIFNTTCBlLAogKiBzZSBob3V2ZXIgdG9rZW4s
IGxvYWQvc2VydmnDp29zIHZpYSBBUEkgZG8gV0hNLiBHcmF2YSBkYXRhL3N0YXRlLmpzb24uCiAq
IFVzbzogcGhwIHByb2JlLnBocCBbLS1wcmludF0KICovCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEp
OwoKJGJhc2UgPSBfX0RJUl9fOwokY2ZnICA9IHJlcXVpcmUgJGJhc2UgLiAnL3RhcmdldHMucGhw
JzsKQG1rZGlyKCRiYXNlIC4gJy9kYXRhJywgMDcwMCwgdHJ1ZSk7CgpmdW5jdGlvbiB0Y3Aoc3Ry
aW5nICRpcCwgaW50ICRwb3J0LCBmbG9hdCAkdG8gPSAzLjApOiBhcnJheSB7CiAgICAkdDAgPSBt
aWNyb3RpbWUodHJ1ZSk7CiAgICAkZnAgPSBAZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRlLCAkZXMs
ICR0byk7CiAgICAkbXMgPSAoaW50KSByb3VuZCgobWljcm90aW1lKHRydWUpIC0gJHQwKSAqIDEw
MDApOwogICAgaWYgKCRmcCkgeyBmY2xvc2UoJGZwKTsgcmV0dXJuIFsnb3BlbicgPT4gdHJ1ZSwg
J21zJyA9PiAkbXNdOyB9CiAgICByZXR1cm4gWydvcGVuJyA9PiBmYWxzZSwgJ21zJyA9PiBudWxs
XTsKfQoKZnVuY3Rpb24gaHR0cF9jaGVjayhzdHJpbmcgJHVybCwgZmxvYXQgJHRvID0gNy4wKTog
YXJyYXkgewogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7IHJldHVybiBb
J2NvZGUnID0+IDAsICdtcycgPT4gbnVsbCwgJ2VycicgPT4gJ3NlbSBjdXJsJ107IH0KICAgICRj
aCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgWwogICAgICAg
IENVUkxPUFRfTk9CT0RZID0+IHRydWUsIENVUkxPUFRfVElNRU9VVCA9PiAoaW50KSAkdG8sIENV
UkxPUFRfQ09OTkVDVFRJTUVPVVQgPT4gNCwKICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVS
ID0+IGZhbHNlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IDAsCiAgICAgICAgQ1VSTE9QVF9S
RVRVUk5UUkFOU0ZFUiA9PiB0cnVlLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IHRydWUsCiAg
ICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgPT4gJ0d1YXJkaWFuTWluZC8xJywKICAgIF0pOwogICAg
Y3VybF9leGVjKCRjaCk7CiAgICAkY29kZSA9IChpbnQpIGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJ
TkZPX0hUVFBfQ09ERSk7CiAgICAkbXMgICA9IChpbnQpIHJvdW5kKGN1cmxfZ2V0aW5mbygkY2gs
IENVUkxJTkZPX1RPVEFMX1RJTUUpICogMTAwMCk7CiAgICAkZXJyICA9IGN1cmxfZXJyb3IoJGNo
KTsKICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIHJldHVybiBbJ2NvZGUnID0+ICRjb2RlLCAnbXMn
ID0+ICRtcywgJ2VycicgPT4gJGVycl07Cn0KCmZ1bmN0aW9uIHNzbF9kYXlzKHN0cmluZyAkaXAs
IGludCAkcG9ydCA9IDQ0MywgZmxvYXQgJHRvID0gNS4wKTogP2ludCB7CiAgICAkY3R4ID0gc3Ry
ZWFtX2NvbnRleHRfY3JlYXRlKFsnc3NsJyA9PiBbCiAgICAgICAgJ2NhcHR1cmVfcGVlcl9jZXJ0
JyA9PiB0cnVlLCAndmVyaWZ5X3BlZXInID0+IGZhbHNlLAogICAgICAgICd2ZXJpZnlfcGVlcl9u
YW1lJyA9PiBmYWxzZSwgJ1NOSV9lbmFibGVkJyA9PiB0cnVlLAogICAgXV0pOwogICAgJGMgPSBA
c3RyZWFtX3NvY2tldF9jbGllbnQoInNzbDovLyRpcDokcG9ydCIsICRlLCAkZXMsICR0bywgU1RS
RUFNX0NMSUVOVF9DT05ORUNULCAkY3R4KTsKICAgIGlmICghJGMpIHsgcmV0dXJuIG51bGw7IH0K
ICAgICRwYXJhbXMgPSBzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zKCRjKTsKICAgIGZjbG9zZSgk
Yyk7CiAgICBpZiAoZW1wdHkoJHBhcmFtc1snb3B0aW9ucyddWydzc2wnXVsncGVlcl9jZXJ0aWZp
Y2F0ZSddKSkgeyByZXR1cm4gbnVsbDsgfQogICAgJGNlcnQgPSBvcGVuc3NsX3g1MDlfcGFyc2Uo
JHBhcmFtc1snb3B0aW9ucyddWydzc2wnXVsncGVlcl9jZXJ0aWZpY2F0ZSddKTsKICAgIGlmIChl
bXB0eSgkY2VydFsndmFsaWRUb190aW1lX3QnXSkpIHsgcmV0dXJuIG51bGw7IH0KICAgIHJldHVy
biAoaW50KSBmbG9vcigoJGNlcnRbJ3ZhbGlkVG9fdGltZV90J10gLSB0aW1lKCkpIC8gODY0MDAp
Owp9CgovKiBBUEkgZG8gV0hNIChvcGNpb25hbCk6IGxvYWQgKyBzZXJ2acOnb3MgcGFyYWRvcy4g
U2VtIHRva2VuLCBwdWxhLiAqLwpmdW5jdGlvbiB3aG1fYXBpKHN0cmluZyAkaXAsIHN0cmluZyAk
dXNlciwgc3RyaW5nICR0b2tlbik6ID9hcnJheSB7CiAgICBpZiAoJHRva2VuID09PSAnJyB8fCAh
ZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgeyByZXR1cm4gbnVsbDsgfQogICAgJGNhbGwg
PSBmdW5jdGlvbiAoc3RyaW5nICRmbikgdXNlICgkaXAsICR1c2VyLCAkdG9rZW4pIHsKICAgICAg
ICAkY2ggPSBjdXJsX2luaXQoImh0dHBzOi8vJGlwOjIwODcvanNvbi1hcGkvJGZuP2FwaS52ZXJz
aW9uPTEiKTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFsKICAgICAgICAgICAgQ1VS
TE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZh
bHNlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NUID0+IDAsCiAgICAgICAgICAgIENVUkxPUFRfVElN
RU9VVCA9PiA4LCBDVVJMT1BUX0hUVFBIRUFERVIgPT4gWyJBdXRob3JpemF0aW9uOiB3aG0gJHVz
ZXI6JHRva2VuIl0sCiAgICAgICAgXSk7CiAgICAgICAgJHIgPSBjdXJsX2V4ZWMoJGNoKTsgY3Vy
bF9jbG9zZSgkY2gpOwogICAgICAgIHJldHVybiAkciA/IGpzb25fZGVjb2RlKCRyLCB0cnVlKSA6
IG51bGw7CiAgICB9OwogICAgJG91dCA9IFtdOwogICAgJGxhID0gJGNhbGwoJ3N5c3RlbWxvYWRh
dmcnKTsKICAgIGlmIChpc3NldCgkbGFbJ2RhdGEnXVsnb25lJ10pKSB7ICRvdXRbJ2xvYWQxJ10g
PSAoZmxvYXQpICRsYVsnZGF0YSddWydvbmUnXTsgfQogICAgJHN2ID0gJGNhbGwoJ3NlcnZpY2Vz
dGF0dXMnKTsKICAgIGlmIChpc3NldCgkc3ZbJ2RhdGEnXVsnc2VydmljZSddKSkgewogICAgICAg
ICRkb3duID0gW107CiAgICAgICAgZm9yZWFjaCAoJHN2WydkYXRhJ11bJ3NlcnZpY2UnXSBhcyAk
cykgewogICAgICAgICAgICBpZiAoaXNzZXQoJHNbJ2VuYWJsZWQnXSwgJHNbJ3J1bm5pbmcnXSkg
JiYgJHNbJ2VuYWJsZWQnXSAmJiAhJHNbJ3J1bm5pbmcnXSkgeyAkZG93bltdID0gJHNbJ25hbWUn
XTsgfQogICAgICAgIH0KICAgICAgICAkb3V0WydzZXJ2aWNlc19kb3duJ10gPSAkZG93bjsKICAg
IH0KICAgIHJldHVybiAkb3V0ID86IG51bGw7Cn0KCiR0YXJnZXRzID0gW107CmZvcmVhY2ggKCRj
ZmdbJ3RhcmdldHMnXSBhcyAkdCkgewogICAgJHBvcnRzID0gW107ICRhbnlPcGVuID0gZmFsc2U7
ICRtaW5NcyA9IG51bGw7CiAgICBmb3JlYWNoICgkdFsncG9ydHMnXSBhcyAkcCkgewogICAgICAg
ICRyID0gdGNwKCR0WydpcCddLCAkcCk7CiAgICAgICAgJHBvcnRzWyRwXSA9ICRyWydvcGVuJ107
CiAgICAgICAgaWYgKCRyWydvcGVuJ10pIHsgJGFueU9wZW4gPSB0cnVlOyBpZiAoJHJbJ21zJ10g
IT09IG51bGwgJiYgKCRtaW5NcyA9PT0gbnVsbCB8fCAkclsnbXMnXSA8ICRtaW5NcykpIHsgJG1p
bk1zID0gJHJbJ21zJ107IH0gfQogICAgfQoKICAgICRodHRwID0gbnVsbDsKICAgIGlmICghZW1w
dHkoJHRbJ2h0dHBzJ10pKSAgICAgICAgeyAkaHR0cCA9IGh0dHBfY2hlY2soJHRbJ2h0dHBzJ10p
OyB9CiAgICBlbHNlaWYgKCRwb3J0c1s0NDNdID8/IGZhbHNlKSAgIHsgJGh0dHAgPSBodHRwX2No
ZWNrKCdodHRwczovLycgLiAkdFsnaXAnXSAuICcvJyk7IH0KICAgIGVsc2VpZiAoJHBvcnRzWzgw
XSA/PyBmYWxzZSkgICAgeyAkaHR0cCA9IGh0dHBfY2hlY2soJ2h0dHA6Ly8nIC4gJHRbJ2lwJ10g
LiAnLycpOyB9CgogICAgJHNzbCA9IG51bGw7CiAgICBpZiAoJHBvcnRzWzQ0M10gPz8gZmFsc2Up
ICAgICAgICB7ICRzc2wgPSBzc2xfZGF5cygkdFsnaXAnXSwgNDQzKTsgfQogICAgZWxzZWlmICgk
cG9ydHNbMjA4N10gPz8gZmFsc2UpICAgeyAkc3NsID0gc3NsX2RheXMoJHRbJ2lwJ10sIDIwODcp
OyB9CgogICAgJHdobSA9IGlzc2V0KCR0Wyd3aG0nXSkgPyB3aG1fYXBpKCR0WydpcCddLCAkdFsn
d2htJ11bJ3VzZXInXSwgJHRbJ3dobSddWyd0b2tlbiddKSA6IG51bGw7CgogICAgLy8gc3RhdHVz
OiBjcml0IHNlIGluYWxjYW7Dp8OhdmVsLCA1eHgsIFNTTDw3ZCBvdSBzZXJ2acOnbyBXSE0gcGFy
YWRvOyB3YXJuIHNlIFNTTDwyMWQKICAgICRzdGF0dXMgPSAnb2snOwogICAgaWYgKCEkYW55T3Bl
bikgeyAkc3RhdHVzID0gJ2NyaXQnOyB9CiAgICBlbHNlaWYgKCgkaHR0cCAmJiAkaHR0cFsnY29k
ZSddID49IDUwMCkgfHwgKCRzc2wgIT09IG51bGwgJiYgJHNzbCA8IDcpIHx8ICghZW1wdHkoJHdo
bVsnc2VydmljZXNfZG93biddKSkpIHsgJHN0YXR1cyA9ICdjcml0JzsgfQogICAgZWxzZWlmICgo
JHNzbCAhPT0gbnVsbCAmJiAkc3NsIDwgMjEpKSB7ICRzdGF0dXMgPSAnd2Fybic7IH0KCiAgICAk
dGFyZ2V0c1tdID0gWwogICAgICAgICduYW1lJyA9PiAkdFsnbmFtZSddLCAnZ3JvdXAnID0+ICR0
Wydncm91cCddLCAnaXAnID0+ICR0WydpcCddLAogICAgICAgICdyZWFjaGFibGUnID0+ICRhbnlP
cGVuLCAncG9ydHMnID0+ICRwb3J0cywgJ2h0dHAnID0+ICRodHRwLAogICAgICAgICdzc2xfZGF5
cycgPT4gJHNzbCwgJ2xhdGVuY3lfbXMnID0+ICRtaW5NcywgJ3dobScgPT4gJHdobSwgJ3N0YXR1
cycgPT4gJHN0YXR1cywKICAgIF07Cn0KCiRzdGF0ZSA9IFsnZ2VuZXJhdGVkJyA9PiB0aW1lKCks
ICdjZW50ZXInID0+ICRjZmdbJ21ldGEnXVsnY2VudGVyJ10sICd0YXJnZXRzJyA9PiAkdGFyZ2V0
c107CmZpbGVfcHV0X2NvbnRlbnRzKCRiYXNlIC4gJy9kYXRhL3N0YXRlLmpzb24nLCBqc29uX2Vu
Y29kZSgkc3RhdGUsIEpTT05fUFJFVFRZX1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyks
IExPQ0tfRVgpOwoKaWYgKFBIUF9TQVBJID09PSAnY2xpJyAmJiBpbl9hcnJheSgnLS1wcmludCcs
ICRhcmd2LCB0cnVlKSkgewogICAgZWNobyBqc29uX2VuY29kZSgkc3RhdGUsIEpTT05fUFJFVFRZ
X1BSSU5UIHwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUykgLiBQSFBfRU9MOwp9Cg==
B64_probe.php
base64 -d > "$CODE/rules.php" <<'B64_rules.php'
PD9waHAKLyoqCiAqIEd1YXJkaWFuIOKAlCBhbGVydGFzIChyb2RhIG5vIGd1YXJkaWFubWluZCB2
aWEgY3Jvbiwgc2VtIHJvb3QpLgogKiBMw6ogZGF0YS9zdGF0ZS5qc29uOyBwYXJhIGNhZGEgYWx2
byBlbSBDUklUL1dBUk4gbm92bywgZW52aWEgZS1tYWlsIChjb29sZG93bikuCiAqIFVzbzogcGhw
IHJ1bGVzLnBocCBbLS10ZXN0XQogKi8KZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgokYmFzZSA9
IF9fRElSX187CiRjZmcgID0gcmVxdWlyZSAkYmFzZSAuICcvdGFyZ2V0cy5waHAnOwokdGVzdCA9
IGluX2FycmF5KCctLXRlc3QnLCAkYXJndiwgdHJ1ZSk7CgokcmF3ID0gQGZpbGVfZ2V0X2NvbnRl
bnRzKCRiYXNlIC4gJy9kYXRhL3N0YXRlLmpzb24nKTsKaWYgKCRyYXcgPT09IGZhbHNlKSB7IGZ3
cml0ZShTVERFUlIsICJzZW0gc3RhdGUuanNvbiAocm9kZSBvIHByb2JlLnBocCBwcmltZWlybylc
biIpOyBleGl0KDEpOyB9CiRzdCA9IGpzb25fZGVjb2RlKCRyYXcsIHRydWUpOwppZiAoIWlzX2Fy
cmF5KCRzdCkpIHsgZXhpdCgxKTsgfQoKQG1rZGlyKCRiYXNlIC4gJy9kYXRhL2FsZXJ0cycsIDA3
MDAsIHRydWUpOwokbm93ID0gdGltZSgpOwokY29vbCA9IChpbnQpICRjZmdbJ2FsZXJ0J11bJ2Nv
b2xkb3duJ107CiRmaXJlZCA9IFtdOwoKZm9yZWFjaCAoJHN0Wyd0YXJnZXRzJ10gYXMgJHQpIHsK
ICAgIGlmICgkdFsnc3RhdHVzJ10gPT09ICdvaycpIHsgY29udGludWU7IH0KICAgICRrZXkgID0g
JGJhc2UgLiAnL2RhdGEvYWxlcnRzLycgLiBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV0vaScsICdf
JywgJHRbJ25hbWUnXSk7CiAgICBpZiAoISR0ZXN0ICYmIGlzX2ZpbGUoJGtleSkgJiYgKCRub3cg
LSAoaW50KSBAZmlsZV9nZXRfY29udGVudHMoJGtleSkpIDwgJGNvb2wpIHsgY29udGludWU7IH0K
ICAgIEBmaWxlX3B1dF9jb250ZW50cygka2V5LCAoc3RyaW5nKSAkbm93KTsKCiAgICAkcmVhc29u
cyA9IFtdOwogICAgaWYgKCEkdFsncmVhY2hhYmxlJ10pICAgICAgICAgICAgICAgICAgICAgIHsg
JHJlYXNvbnNbXSA9ICdpbmFsY2Fuw6fDoXZlbCAodG9kYXMgYXMgcG9ydGFzIGZlY2hhZGFzKSc7
IH0KICAgIGlmICghZW1wdHkoJHRbJ2h0dHAnXSkgJiYgJHRbJ2h0dHAnXVsnY29kZSddID49IDUw
MCkgeyAkcmVhc29uc1tdID0gJ0hUVFAgJyAuICR0WydodHRwJ11bJ2NvZGUnXTsgfQogICAgaWYg
KCR0Wydzc2xfZGF5cyddICE9PSBudWxsICYmICR0Wydzc2xfZGF5cyddIDwgMjEpICB7ICRyZWFz
b25zW10gPSAnU1NMIGV4cGlyYSBlbSAnIC4gJHRbJ3NzbF9kYXlzJ10gLiAnZCc7IH0KICAgIGlm
ICghZW1wdHkoJHRbJ3dobSddWydzZXJ2aWNlc19kb3duJ10pKSAgICB7ICRyZWFzb25zW10gPSAn
c2VydmnDp29zIHBhcmFkb3M6ICcgLiBpbXBsb2RlKCcsICcsICR0Wyd3aG0nXVsnc2VydmljZXNf
ZG93biddKTsgfQogICAgaWYgKCEkcmVhc29ucykgeyAkcmVhc29uc1tdID0gJ2VzdGFkbyAnIC4g
c3RydG91cHBlcigkdFsnc3RhdHVzJ10pOyB9CgogICAgJGZpcmVkW10gPSBzdHJ0b3VwcGVyKCR0
WydzdGF0dXMnXSkgLiAiIMK3IHskdFsnbmFtZSddfSAoeyR0WydpcCddfSkg4oCUICIgLiBpbXBs
b2RlKCcgwrcgJywgJHJlYXNvbnMpOwp9CgppZiAoISRmaXJlZCkgeyBpZiAoJHRlc3QpIHsgZWNo
byAiT0sg4oCUIG5lbmh1bSBhbHZvIGVtIGFsZXJ0YS5cbiI7IH0gZXhpdCgwKTsgfQoKJGJvZHkg
PSAiR1VBUkRJQU4g4oCUIGFsZXJ0YXMgKHskc3RbJ2NlbnRlciddfSlcbiIgLiBkYXRlKCdZLW0t
ZCBIOmk6cycsICRub3cpIC4gIlxuXG4gLSAiIC4gaW1wbG9kZSgiXG4gLSAiLCAkZmlyZWQpIC4g
IlxuIjsKJHN1YmogPSAnW0dVQVJESUFOXSAnIC4gY291bnQoJGZpcmVkKSAuICcgYWxlcnRhKHMp
JzsKJHRvICAgPSAkY2ZnWydhbGVydCddWyd0byddOwokZnJvbSA9ICRjZmdbJ2FsZXJ0J11bJ2Zy
b20nXTsKCiRzZW50ID0gZmFsc2U7CiRzbSA9ICcvdXNyL3NiaW4vc2VuZG1haWwnOwppZiAoaXNf
ZXhlY3V0YWJsZSgkc20pKSB7CiAgICAkcCA9IHBvcGVuKCRzbSAuICcgLXQnLCAndycpOwogICAg
aWYgKCRwKSB7IGZ3cml0ZSgkcCwgIkZyb206ICRmcm9tXG5UbzogJHRvXG5TdWJqZWN0OiAkc3Vi
alxuQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG5cbiRib2R5Iik7IHBj
bG9zZSgkcCk7ICRzZW50ID0gdHJ1ZTsgfQp9CmlmICghJHNlbnQpIHsgQG1haWwoJHRvLCAkc3Vi
aiwgJGJvZHksICJGcm9tOiAkZnJvbSIpOyB9CgplY2hvIGNvdW50KCRmaXJlZCkgLiAiIGFsZXJ0
YShzKSBlbnZpYWRvcyBwYXJhICR0b1xuIjsKaWYgKCR0ZXN0KSB7IGVjaG8gIlxuJGJvZHkiOyB9
Cg==
B64_rules.php
base64 -d > "$WEB/api.php" <<'B64_api'
PD9waHAKLy8gR3VhcmRpYW4g4oCUIEFQSSByZWFkLW9ubHkgZG8gZGFzaGJvYXJkLiBTZXJ2ZSBk
YXRhL3N0YXRlLmpzb24gY29tIGdhdGUgcG9yIGNoYXZlLgpkZWNsYXJlKHN0cmljdF90eXBlcz0x
KTsKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgn
KTsKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZScpOwoKJGhvbWUgICAgPSBkaXJuYW1l
KF9fRElSX18sIDIpOyAgICAgICAgICAgIC8vIC4uLi9wdWJsaWNfaHRtbC9ndWFyZGlhbiAtPiBo
b21lCiRrZXlmaWxlID0gJGhvbWUgLiAnL2d1YXJkaWFuL2FwaWtleS50eHQnOwoka2V5ICAgICA9
IGlzX2ZpbGUoJGtleWZpbGUpID8gdHJpbSgoc3RyaW5nKSBmaWxlX2dldF9jb250ZW50cygka2V5
ZmlsZSkpIDogJyc7CgppZiAoJGtleSAhPT0gJycgJiYgKCgkX0dFVFsnayddID8/ICcnKSAhPT0g
JGtleSkpIHsKICAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDMpOwogICAgZWNobyBqc29uX2VuY29k
ZShbJ2Vycm9yJyA9PiAnZm9yYmlkZGVuJ10pOwogICAgZXhpdDsKfQoKJGYgPSAkaG9tZSAuICcv
Z3VhcmRpYW4vZGF0YS9zdGF0ZS5qc29uJzsKaWYgKCFpc19maWxlKCRmKSkgeyBlY2hvIGpzb25f
ZW5jb2RlKFsnZXJyb3InID0+ICdzZW0gZGFkb3MgYWluZGEg4oCUIHJvZGUgbyBwcm9iZS5waHAn
XSk7IGV4aXQ7IH0KcmVhZGZpbGUoJGYpOwo=
B64_api
base64 -d > "$WEB/index.html" <<'B64_idx'
PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRo
LGluaXRpYWwtc2NhbGU9MSI+Cjx0aXRsZT5HdWFyZGlhbiDigJQgTWluZCBHcm91cDwvdGl0bGU+
CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNv
bSI+PGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29t
IiBjcm9zc29yaWdpbj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2ZvbnRz
Lmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hbnJvcGU6d2dodEA0MDA7NTAwOzYwMDs3MDA7
ODAwJmZhbWlseT1JQk0rUGxleCtNb25vOndnaHRANDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwIj4K
PHN0eWxlPgo6cm9vdHstLWJnOiMwNzExMWY7LS1jYXJkOiMwZDFhMmE7LS1jYXJkMjojMTIyMjM3
Oy0tbGluZTojMjEzNDRhOy0tdGV4dDojZjNmN2ZjOy0tbXV0ZWQ6IzhmYTFiODstLWZhaW50OiM2
Mzc4OGY7Ci0tZ3JlZW46IzMzZDY5ZjstLWFtYmVyOiNmNWI5NDI7LS1yZWQ6I2ZmNTI2MzstLWJs
dWU6IzU1YTdmZjstLW1vbm86J0lCTSBQbGV4IE1vbm8nLHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7
LS1zYW5zOidNYW5yb3BlJyxzeXN0ZW0tdWksc2Fucy1zZXJpZn0KKntib3gtc2l6aW5nOmJvcmRl
ci1ib3h9Ym9keXttYXJnaW46MDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQg
NjAlIC01JSwjMGQyNzQyIDAsdHJhbnNwYXJlbnQgMzIlKSx2YXIoLS1iZyk7Y29sb3I6dmFyKC0t
dGV4dCk7Zm9udC1mYW1pbHk6dmFyKC0tc2Fucyk7bGluZS1oZWlnaHQ6MS41fQoud3JhcHttYXgt
d2lkdGg6MTQwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyMnB4IDIycHggNjBweH0KaGVhZGVy
e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7ZmxleC13cmFwOndyYXA7
bWFyZ2luLWJvdHRvbTo4cHh9Ci5tYXJre3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJh
ZGl1czoxMXB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0NWRlZywjMThiODg2LCMzM2Q2
OWYpO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Y29sb3I6IzA0MjUxYTtmb250LXdl
aWdodDo5MDA7Zm9udC1zaXplOjE5cHh9Cmgxe2ZvbnQtc2l6ZToxOHB4O21hcmdpbjowO2xldHRl
ci1zcGFjaW5nOi4wMmVtfWgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEwcHg7Y29s
b3I6dmFyKC0tZ3JlZW4pO2xldHRlci1zcGFjaW5nOi4xOGVtO2ZvbnQtd2VpZ2h0OjYwMH0KLnVw
ZHttYXJnaW4tbGVmdDphdXRvO2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2ZvbnQtc2l6ZToxMnB4
O2NvbG9yOnZhcigtLWZhaW50KX0KLnN1bXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1
bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjEycHg7bWFyZ2luOjE2cHggMCAyMnB4fQouc3tiYWNrZ3Jv
dW5kOnZhcigtLWNhcmQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1
czoxMnB4O3BhZGRpbmc6MTRweCAxNnB4fQoucyBie2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO2Zv
bnQtc2l6ZToyOHB4O2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzotMXB4O2Rpc3BsYXk6
YmxvY2t9Ci5zIHNwYW57Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbXV0ZWQpfQoucy5nIGJ7
Y29sb3I6dmFyKC0tZ3JlZW4pfS5zLncgYntjb2xvcjp2YXIoLS1hbWJlcil9LnMuYyBie2NvbG9y
OnZhcigtLXJlZCl9Ci5ncm91cHRpdGxle2ZvbnQtc2l6ZToxMnB4O3RleHQtdHJhbnNmb3JtOnVw
cGVyY2FzZTtsZXR0ZXItc3BhY2luZzouMWVtO2NvbG9yOnZhcigtLWZhaW50KTttYXJnaW46MjJw
eCAwIDEwcHg7Zm9udC13ZWlnaHQ6NjAwfQouZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0
ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDI1NXB4LDFmcikpO2dhcDoxMnB4fQou
bm9kZXtiYWNrZ3JvdW5kOnZhcigtLWNhcmQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7
Ym9yZGVyLWxlZnQtd2lkdGg6NHB4O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHggMTVw
eH0KLm5vZGUub2t7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tZ3JlZW4pfS5ub2RlLndhcm57Ym9y
ZGVyLWxlZnQtY29sb3I6dmFyKC0tYW1iZXIpfS5ub2RlLmNyaXR7Ym9yZGVyLWxlZnQtY29sb3I6
dmFyKC0tcmVkKX0KLm5vZGUgLnRvcHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dh
cDo4cHh9Ci5ub2RlIC5ubXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE1cHh9Ci5ub2RlIC5p
cHtmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mYWlu
dCl9Ci5iYWRnZXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0Ojcw
MDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA1ZW07cGFkZGluZzoz
cHggOXB4O2JvcmRlci1yYWRpdXM6OTlweH0KLmJhZGdlLm9re2NvbG9yOnZhcigtLWdyZWVuKTti
YWNrZ3JvdW5kOiMzM2Q2OWYxOH0uYmFkZ2Uud2Fybntjb2xvcjp2YXIoLS1hbWJlcik7YmFja2dy
b3VuZDojZjViOTQyMTh9LmJhZGdlLmNyaXR7Y29sb3I6dmFyKC0tcmVkKTtiYWNrZ3JvdW5kOiNm
ZjUyNjMxOH0KLmt2e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtn
YXA6NnB4IDEwcHg7bWFyZ2luLXRvcDoxMnB4fQoua3YgZGl2e2ZvbnQtc2l6ZToxMXB4O2NvbG9y
OnZhcigtLW11dGVkKX0KLmt2IGJ7Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Y29sb3I6dmFyKC0t
dGV4dCk7Zm9udC13ZWlnaHQ6NjAwfQoua3YgYi5iYWR7Y29sb3I6dmFyKC0tcmVkKX0ua3YgYi53
YXJudntjb2xvcjp2YXIoLS1hbWJlcil9Ci5wb3J0c3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndy
YXA7Z2FwOjVweDttYXJnaW4tdG9wOjExcHh9Ci5wdHtmb250LWZhbWlseTp2YXIoLS1tb25vKTtm
b250LXNpemU6MTBweDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFw
eCBzb2xpZCB2YXIoLS1saW5lKTtjb2xvcjp2YXIoLS1mYWludCl9Ci5wdC5vbntjb2xvcjp2YXIo
LS1ncmVlbik7Ym9yZGVyLWNvbG9yOiMyYzUzNDZ9LnB0Lm9mZntjb2xvcjp2YXIoLS1yZWQpO2Jv
cmRlci1jb2xvcjojNWIyYjMwfQouZXJye2JhY2tncm91bmQ6IzFhMGYxNDtib3JkZXI6MXB4IHNv
bGlkICM1YjJiMzA7Y29sb3I6I2ZmOWFhNTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4
O2ZvbnQtc2l6ZToxM3B4fQouZm9vdHttYXJnaW4tdG9wOjI2cHg7Y29sb3I6dmFyKC0tZmFpbnQp
O2ZvbnQtc2l6ZToxMXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmct
dG9wOjE0cHh9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9IndyYXAiPgogIDxo
ZWFkZXI+CiAgICA8ZGl2IGNsYXNzPSJtYXJrIj5HPC9kaXY+CiAgICA8aDE+R3VhcmRpYW48c21h
bGw+TUlORCBHUk9VUCDCtyBNT05JVE9SQU1FTlRPIENFTlRSQUw8L3NtYWxsPjwvaDE+CiAgICA8
ZGl2IGNsYXNzPSJ1cGQiIGlkPSJ1cGQiPmNhcnJlZ2FuZG/igKY8L2Rpdj4KICA8L2hlYWRlcj4K
ICA8ZGl2IGlkPSJhcHAiPjxkaXYgY2xhc3M9ImVyciIgaWQ9ImVyciIgc3R5bGU9ImRpc3BsYXk6
bm9uZSI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzdW0iIGlkPSJzdW0iPjwvZGl2PgogICAgPGRp
diBpZD0iZ3JvdXBzIj48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJmb290Ij5DZW50cm86
IDxzcGFuIGlkPSJjZW50ZXIiPuKAlDwvc3Bhbj4gwrcgYXR1YWxpemEgYSBjYWRhIDMwcyDCtyBw
cm92YXMgZXh0ZXJuYXMgKHBvcnRhcyDCtyBIVFRQIMK3IFNTTCkuIE3DqXRyaWNhcyBpbnRlcm5h
cyAoZGlzY28vUkFNL0RvY2tlcikgZW50cmFtIG5hIGNhbWFkYSBjb20gYWdlbnRlL0FQSS48L2Rp
dj4KPC9kaXY+CjxzY3JpcHQ+CmNvbnN0IEtFWT0nX19BUElLRVlfXyc7CmZ1bmN0aW9uIHBpbGwo
cyl7cmV0dXJuIHM9PT0nb2snPydvayc6KHM9PT0nd2Fybic/J3dhcm4nOidjcml0Jyl9CmZ1bmN0
aW9uIGVzYyh4KXtyZXR1cm4gKHg9PW51bGw/Jyc6KCcnK3gpKS5yZXBsYWNlKC9bPD4mXS9nLGM9
Pih7JzwnOicmbHQ7JywnPic6JyZndDsnLCcmJzonJmFtcDsnfVtjXSkpfQphc3luYyBmdW5jdGlv
biBsb2FkKCl7CiAgdHJ5ewogICAgY29uc3Qgcj1hd2FpdCBmZXRjaCgnYXBpLnBocCcrKEtFWT8o
Jz9rPScrZW5jb2RlVVJJQ29tcG9uZW50KEtFWSkpOicnKSsnJl89JytEYXRlLm5vdygpKTsKICAg
IGNvbnN0IGQ9YXdhaXQgci5qc29uKCk7CiAgICBpZihkLmVycm9yKXtkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZXJyJykuc3R5bGUuZGlzcGxheT0nYmxvY2snO2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdlcnInKS50ZXh0Q29udGVudD0nRXJybzogJytkLmVycm9yO3JldHVybjt9CiAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgICByZW5k
ZXIoZCk7CiAgfWNhdGNoKGUpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnInKS5zdHlsZS5k
aXNwbGF5PSdibG9jayc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VycicpLnRleHRDb250ZW50
PSdGYWxoYSBhbyBidXNjYXIgYXBpLnBocDogJytlLm1lc3NhZ2U7fQp9CmZ1bmN0aW9uIHJlbmRl
cihkKXsKICBjb25zdCB0cz1uZXcgRGF0ZSgoZC5nZW5lcmF0ZWR8fDApKjEwMDApOwogIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd1cGQnKS50ZXh0Q29udGVudD0nYXR1YWxpemFkbyAnK3RzLnRv
TG9jYWxlVGltZVN0cmluZygncHQtQlInKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Vu
dGVyJykudGV4dENvbnRlbnQ9ZC5jZW50ZXJ8fCfigJQnOwogIGNvbnN0IFQ9ZC50YXJnZXRzfHxb
XTsKICBjb25zdCBvaz1ULmZpbHRlcih0PT50LnN0YXR1cz09PSdvaycpLmxlbmd0aCwgdz1ULmZp
bHRlcih0PT50LnN0YXR1cz09PSd3YXJuJykubGVuZ3RoLCBjPVQuZmlsdGVyKHQ9PnQuc3RhdHVz
PT09J2NyaXQnKS5sZW5ndGg7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bScpLmlubmVy
SFRNTD0KICAgIHRpbGUoJycsVC5sZW5ndGgsJ1NlcnZpZG9yZXMnKSt0aWxlKCdnJyxvaywnU2F1
ZMOhdmVpcycpK3RpbGUoJ3cnLHcsJ0F0ZW7Dp8OjbycpK3RpbGUoJ2MnLGMsJ0Nyw610aWNvcycp
OwogIGNvbnN0IGdyb3Vwcz17fTsKICBULmZvckVhY2godD0+eyhncm91cHNbdC5ncm91cF09Z3Jv
dXBzW3QuZ3JvdXBdfHxbXSkucHVzaCh0KX0pOwogIGxldCBodG1sPScnOwogIGZvcihjb25zdCBn
IGluIGdyb3Vwcyl7CiAgICBodG1sKz0nPGRpdiBjbGFzcz0iZ3JvdXB0aXRsZSI+Jytlc2MoZykr
JzwvZGl2PjxkaXYgY2xhc3M9ImdyaWQiPic7CiAgICBncm91cHNbZ10uZm9yRWFjaCh0PT5odG1s
Kz1jYXJkKHQpKTsKICAgIGh0bWwrPSc8L2Rpdj4nOwogIH0KICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZ3JvdXBzJykuaW5uZXJIVE1MPWh0bWw7Cn0KZnVuY3Rpb24gdGlsZShjbHMsbixsKXty
ZXR1cm4gJzxkaXYgY2xhc3M9InMgJytjbHMrJyI+PGI+JytuKyc8L2I+PHNwYW4+JytsKyc8L3Nw
YW4+PC9kaXY+J30KZnVuY3Rpb24gY2FyZCh0KXsKICBjb25zdCBzdD1waWxsKHQuc3RhdHVzKTsK
ICBjb25zdCBodHRwPXQuaHR0cCYmdC5odHRwLmNvZGU/KHQuaHR0cC5jb2RlKycgwrcgJyt0Lmh0
dHAubXMrJ21zJyk6KHQuaHR0cD8nc2VtIHJlc3Bvc3RhJzon4oCUJyk7CiAgY29uc3QgaHR0cEJh
ZD10Lmh0dHAmJnQuaHR0cC5jb2RlPj01MDA7CiAgY29uc3QgbGF0PXQubGF0ZW5jeV9tcyE9bnVs
bD90LmxhdGVuY3lfbXMrJ21zJzon4oCUJzsKICBjb25zdCBzc2w9dC5zc2xfZGF5cz09bnVsbD8n
4oCUJzoodC5zc2xfZGF5cysnZCcpOwogIGNvbnN0IHNzbENscz10LnNzbF9kYXlzPT1udWxsPycn
Oih0LnNzbF9kYXlzPDc/J2JhZCc6KHQuc3NsX2RheXM8MjE/J3dhcm52JzonJykpOwogIGxldCBw
b3J0cz0nJzsKICBmb3IoY29uc3QgcCBpbiAodC5wb3J0c3x8e30pKXtwb3J0cys9JzxzcGFuIGNs
YXNzPSJwdCAnKyh0LnBvcnRzW3BdPydvbic6J29mZicpKyciPicrcCsnPC9zcGFuPic7fQogIGNv
bnN0IGRuPSh0LndobSYmdC53aG0uc2VydmljZXNfZG93biYmdC53aG0uc2VydmljZXNfZG93bi5s
ZW5ndGgpPygnPGRpdj5TZXJ2acOnb3M8YiBjbGFzcz0iYmFkIj4nK2VzYyh0LndobS5zZXJ2aWNl
c19kb3duLmpvaW4oJywgJykpKyc8L2I+PC9kaXY+Jyk6Jyc7CiAgY29uc3QgbG9hZD0odC53aG0m
JnQud2htLmxvYWQxIT1udWxsKT8oJzxkaXY+TG9hZDxiPicrdC53aG0ubG9hZDErJzwvYj48L2Rp
dj4nKTonJzsKICByZXR1cm4gJzxkaXYgY2xhc3M9Im5vZGUgJytzdCsnIj48ZGl2IGNsYXNzPSJ0
b3AiPjxzcGFuIGNsYXNzPSJubSI+Jytlc2ModC5uYW1lKSsnPC9zcGFuPicKICAgICsnPHNwYW4g
Y2xhc3M9ImJhZGdlICcrc3QrJyI+JytzdCsnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImlwIj4n
K2VzYyh0LmlwKSsnPC9kaXY+JwogICAgKyc8ZGl2IGNsYXNzPSJrdiI+PGRpdj5IVFRQPGIgY2xh
c3M9IicrKGh0dHBCYWQ/J2JhZCc6JycpKyciPicrZXNjKGh0dHApKyc8L2I+PC9kaXY+JwogICAg
Kyc8ZGl2PkxhdMOqbmNpYTxiPicrZXNjKGxhdCkrJzwvYj48L2Rpdj4nCiAgICArJzxkaXY+U1NM
PGIgY2xhc3M9Iicrc3NsQ2xzKyciPicrZXNjKHNzbCkrJzwvYj48L2Rpdj4nCiAgICArJzxkaXY+
QWxjYW5jZTxiIGNsYXNzPSInKyh0LnJlYWNoYWJsZT8nJzonYmFkJykrJyI+JysodC5yZWFjaGFi
bGU/J29rJzonZm9yYScpKyc8L2I+PC9kaXY+JwogICAgK2xvYWQrZG4rJzwvZGl2PjxkaXYgY2xh
c3M9InBvcnRzIj4nK3BvcnRzKyc8L2Rpdj48L2Rpdj4nOwp9CmxvYWQoKTsgc2V0SW50ZXJ2YWwo
bG9hZCwzMDAwMCk7Cjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPgo=
B64_idx
KEY="$(openssl rand -hex 16 2>/dev/null || "$PHPBIN" -r "echo bin2hex(random_bytes(16));")"
printf "%s" "$KEY" > "$CODE/apikey.txt"; chmod 600 "$CODE/apikey.txt"
sed -i "s/__APIKEY__/$KEY/" "$WEB/index.html"
( crontab -l 2>/dev/null | grep -v "guardian/" ; echo "*/2 * * * * $PHPBIN $CODE/probe.php >/dev/null 2>&1" ; echo "*/2 * * * * $PHPBIN $CODE/rules.php >/dev/null 2>&1" ) | crontab -
echo "===== INSTALADO. Primeira varredura (pode levar ~1min): ====="
"$PHPBIN" "$CODE/probe.php" --print | head -60
echo; echo "===== Teste de alertas: ====="
"$PHPBIN" "$CODE/rules.php" --test | head -30
echo; echo ">> Dashboard:  https://SEU-DOMINIO-DO-GUARDIANMIND/guardian/"
echo ">> Chave de acesso (guardada em $CODE/apikey.txt): $KEY"
echo ">> Cron ativo:"; crontab -l | grep guardian
