Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

PD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xJbnZvaWNlOwoKdXNlIEFwcFxIdHRwXENvbnRyb2..

Decoded Output download

<?  PD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xJbnZvaWNlOwoKdXNlIEFwcFxIdHRwXENvbnRyb2xsZXJzXENvbnRyb2xsZXI7CnVzZSBBcHBcSHR0cFxSZXF1ZXN0c1xQYXRpZW50QmlsbGluZ0ludm9pY2VSZXF1ZXN0Owp1c2UgQXBwXE1vZGVsc1xCZWRMaXN0Owp1c2UgQXBwXE1vZGVsc1xQYXRpZW50Owp1c2UgQXBwXE1vZGVsc1xQYXRpZW50QmlsbGluZ0ludm9pY2U7CnVzZSBBcHBcTW9kZWxzXFBheW1lbnQ7CnVzZSBBcHBcTW9kZWxzXFNlcnZpY2U7CnVzZSBBcHBcTW9kZWxzXFNldHRpbmc7CnVzZSBBcHBcTW9kZWxzXFNtYXJ0QmlsbGluZzsKdXNlIEFwcFxSZXBvc2l0b3J5XFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDYXJib25cQ2FyYm9uOwp1c2UgRXhjZXB0aW9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcREI7CnVzZSBNcGRmXE1wZGY7CnVzZSBZYWpyYVxEYXRhVGFibGVzXEZhY2FkZXNcRGF0YVRhYmxlczsKCmNsYXNzIFBhdGllbnRCaWxsaW5nSW52b2ljZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHsKICAgIHByaXZhdGUgJHJlcG9zaXRvcnk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zaXRvcnkpIHsKICAgICAgICAkdGhpcy0+cmVwb3NpdG9yeSA9ICRyZXBvc2l0b3J5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChQYXRpZW50QmlsbGluZ0ludm9pY2VSZXF1ZXN0ICRyZXF1ZXN0KSB7CiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmICgkcmVxdWVzdC0+YWpheCgpKSB7CiAgICAgICAgICAgICAgICAvKiRkYXRhID0gUGF0aWVudEJpbGxpbmdJbnZvaWNlOjpsYXRlc3QoKS0+Z2V0KCk7Ki8KICAgICAgICAgICAgICAgICRkYXRhID0gU21hcnRCaWxsaW5nOjpxdWVyeSgpLT5sYXRlc3QoKS0+bGltaXQoNTAwMCktPmdldCgpOwoKICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVGFibGVzOjpvZigkZGF0YSkKICAgICAgICAgICAgICAgICAgICAtPmFkZEluZGV4Q29sdW1uKCkKICAgICAgICAgICAgICAgICAgICAtPmFkZENvbHVtbignbmFtZScsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmX25hbWUgPSAkcm93LT5wYXRpZW50WydmaXJzdF9uYW1lJ10gPz8gJy0nOwogICAgICAgICAgICAgICAgICAgICAgICAkbF9uYW1lID0gJHJvdy0+cGF0aWVudFsnbGFzdF9uYW1lJ10gPz8gJy0nOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmX25hbWUgLiAnICcgLiAkbF9uYW1lOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ3BpZCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT5wYXRpZW50WydwaWQnXSA/PyAnTi9BJzsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC0+YWRkQ29sdW1uKCd0b3RhbCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT50b3RhbEFtb3VudCA/PyAnTi9BJzsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC0+YWRkQ29sdW1uKCd2YXQnLCBmdW5jdGlvbiAoJHJvdykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJvdy0+dmF0ID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ2Rpc2NvdW50JywgZnVuY3Rpb24gKCRyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyb3ctPmRpc2NvdW50ID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ25ldF90b3RhbCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT5uZXRQYXlhYmxlID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ2FjdGlvbicsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRidG4gPSAnPGEgaHJlZj0iJyAuIHJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5wZGYnLCAkcm93LT5pbnZvaWNlX251bWJlcikgLiAnIiBjbGFzcz0iYnRuIGJ0bi1pbmZvIGJ0bi10YWJsZSI+PGkgY2xhc3M9ImZhIGZhLWZpbGUtcGRmLW8gZi0xNiI+PC9pPjwvYT4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KGF1dGgoKS0+dXNlcigpLT5yb2xlX2lkLCBbJzEnLCAnMiddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ0biAuPSAnPGEgaHJlZj0iJyAuIHJvdXRlKCdlZGl0LnNtYXJ0LWJpbGwnLCAkcm93LT5pZCkgLiAnIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi10YWJsZSI+PGkgY2xhc3M9Imljb24tcGVuY2lsLWFsdCBmLTE2Ij48L2k+PC9hPjxidXR0b24gZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI2RhbmdlciIgb25jbGljaz0ib25EZWxldGUodGhpcykiIGlkPSInIC4gcm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmRlc3Ryb3knLCAkcm93LT5pZCkgLiAnIiBuYW1lPSJkZWxCdG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgYnRuLXRhYmxlIGYtMTYgZGVsIj48aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyBmLTE2IGRlbCI+PC9pPjwvYnV0dG9uPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkYnRuOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5yYXdDb2x1bW5zKFsnYWN0aW9uJ10pCiAgICAgICAgICAgICAgICAgICAgLT5tYWtlKHRydWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdmlldygnYWNjb3VudE1hbmFnZXIuaW52b2ljZS5wYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgfQoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZWRpdCgkdXVpZCkgewogICAgICAgICRwYXRpZW50ICAgICAgICA9IFBhdGllbnQ6OndoZXJlKCd1dWlkJywgJHV1aWQpLT53aXRoKCdwYWNrYWdlJyktPmZpcnN0KCk7CiAgICAgICAgJGJlZHMgICAgICAgICAgID0gQmVkTGlzdDo6YWxsKCk7CiAgICAgICAgJGJlZF9hc3NpZ25lZCAgID0gREI6OnRhYmxlKCdwYXRpZW50X2hpc3RvcmllcycpLT53aGVyZSgncGF0aWVudF9pZCcsICRwYXRpZW50LT5pZCktPndoZXJlKCdjYXRlZ29yeScsICdCRUQnKS0+d2hlcmUoJ3R5cGUnLCAnQXNzaWduZWQnKS0+d2hlcmVCZXR3ZWVuKCd0aW1lJywgWyRwYXRpZW50LT5hZG1pdF9kYXRlLCBDYXJib246Om5vdygpXSktPmdldCgpOwogICAgICAgICRiZWRfdW5hc3NpZ25lZCA9IERCOjp0YWJsZSgncGF0aWVudF9oaXN0b3JpZXMnKS0+d2hlcmUoJ3BhdGllbnRfaWQnLCAkcGF0aWVudC0+aWQpLT53aGVyZSgnY2F0ZWdvcnknLCAnQkVEJyktPndoZXJlKCd0eXBlJywgJ1VuYXNzaWduZWQnKS0+d2hlcmVCZXR3ZWVuKCd0aW1lJywgWyRwYXRpZW50LT5hZG1pdF9kYXRlLCBDYXJib246Om5vdygpXSktPmdldCgpOwogICAgICAgICRpbnZvaWNlICAgICAgICA9IFBhdGllbnRCaWxsaW5nSW52b2ljZTo6d2hlcmUoJ3BhdGllbnRfaWQnLCAkcGF0aWVudC0+aWQpLT53aGVyZUJldHdlZW4oJ2NyZWF0ZWRfYXQnLCBbJHBhdGllbnQtPmFkbWl0X2RhdGUsIENhcmJvbjo6bm93KCldKS0+Zmlyc3QoKTsKCiAgICAgICAgaWYgKCRpbnZvaWNlICE9IG51bGwpIHsKICAgICAgICAgICAgJHBheW1lbnQgPSBQYXltZW50Ojp3aGVyZSgncmVmZXJlbmNlX251bWJlcicsICdiaWxsaW5nLScgLiAkaW52b2ljZS0+aW52b2ljZV9udW1iZXIpLT5maXJzdCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXltZW50ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICRwYXRpZW50X3NlcnZpY2VzID0gREI6OnRhYmxlKCdwYXRpZW50X3NlcnZpY2VzJyktPndoZXJlKCdwYXRpZW50X2lkJywgJHBhdGllbnQtPmlkKS0+d2hlcmVCZXR3ZWVuKCdzZXJ2aWNlX2RhdGUnLCBbJHBhdGllbnQtPmFkbWl0X2RhdGUsIENhcmJvbjo6bm93KCldKS0+Z2V0KCk7CiAgICAgICAgJHNlcnZpY2VzICAgICAgICAgPSBTZXJ2aWNlOjphbGwoKTsKCiAgICAgICAgcmV0dXJuIHZpZXcoJ2FjY291bnRNYW5hZ2VyLmludm9pY2UucGF0aWVudC1iaWxsaW5nLWludm9pY2UuZWRpdCcsIFsncGF0aWVudCcgPT4gJHBhdGllbnQsICdiZWRfYXNzaWduZWQnID0+ICRiZWRfYXNzaWduZWQsICdiZWRfdW5hc3NpZ25lZCcgPT4gJGJlZF91bmFzc2lnbmVkLCAnYmVkcycgPT4gJGJlZHMsICdzZXJ2aWNlcycgPT4gJHNlcnZpY2VzLCAnaW52b2ljZScgPT4gJGludm9pY2UsICdwYXltZW50JyA9PiAkcGF5bWVudCwgJ3BhdGllbnRfc2VydmljZXMnID0+ICRwYXRpZW50X3NlcnZpY2VzXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlKFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcXVlc3QgJHJlcXVlc3QpIHsKICAgICAgICAkc2VydmljZV9uYW1lID0gW107CiAgICAgICAgJHNlcnZpY2VfaWQgICA9IFtdOwoKICAgICAgICBpZiAoJHJlcXVlc3QtPnNlcnZpY2VfaWRbMF0gIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnNlcnZpY2VfaWQgYXMgJHNlcnZpY2UpIHsKCiAgICAgICAgICAgICAgICBpZiAoJHNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRpdGVtID0gZXhwbG9kZSgnLScsICRzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzZXJ2aWNlX2lkLCAkaXRlbVswXSk7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc2VydmljZV9uYW1lLCAkaXRlbVsxXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgJGRldGFpbHMgPSBbXTsKCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5wYWNrYWdlX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnBhY2thZ2VfbmFtZSBhcyAka2V5ID0+ICR0aXRsZSkgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZGV0YWlscywgWwogICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJHRpdGxlLAogICAgICAgICAgICAgICAgICAgICdwcmljZScgPT4gJHJlcXVlc3QtPnBhY2thZ2VfcHJpY2VbJGtleV0sCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGlmICgkcmVxdWVzdC0+YmVkX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmJlZF9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+YmVkX3ByaWNlWyRrZXldLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlcnZpY2VfbmFtZSAhPSBudWxsKSB7CgogICAgICAgICAgICBmb3JlYWNoICgkc2VydmljZV9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+c2VydmljZV9wcmljZVska2V5XSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmIChhdXRoKCktPnVzZXIoKS0+cHJvZmlsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRyZXF1ZXN0LT5hbGwoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvc2l0b3J5LT5jcmVhdGVJbnZvaWNlKCRyZXF1ZXN0LCAkZGV0YWlscywgJHNlcnZpY2VfaWQpOwoKICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgncGF0aWVudC5pbmRleCcpLT53aXRoKCdzdWNjZXNzJywgJ0ludm9pY2UgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VzZXIgZG9lcyBub3QgaGF2ZSBhIG5hbWUgaW4gc3lzdGVtJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpLT53aXRoRXJyb3JzKFsnZXJyb3JzJyA9PiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICB9CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUGF0aWVudEJpbGxpbmdJbnZvaWNlUmVxdWVzdCAkcmVxdWVzdCwgJHV1aWQpIHsKICAgICAgICAkc2VydmljZV9uYW1lID0gW107CiAgICAgICAgJHNlcnZpY2VfaWQgICA9IFtdOwoKICAgICAgICBpZiAoJHJlcXVlc3QtPnNlcnZpY2VfaWRbMF0gIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnNlcnZpY2VfaWQgYXMgJHNlcnZpY2UpIHsKCiAgICAgICAgICAgICAgICBpZiAoJHNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRpdGVtID0gZXhwbG9kZSgnLScsICRzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzZXJ2aWNlX2lkLCAkaXRlbVswXSk7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc2VydmljZV9uYW1lLCAkaXRlbVsxXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgJGRldGFpbHMgPSBbXTsKCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5wYWNrYWdlX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnBhY2thZ2VfbmFtZSBhcyAka2V5ID0+ICR0aXRsZSkgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZGV0YWlscywgWwogICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJHRpdGxlLAogICAgICAgICAgICAgICAgICAgICdwcmljZScgPT4gJHJlcXVlc3QtPnBhY2thZ2VfcHJpY2VbJGtleV0sCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGlmICgkcmVxdWVzdC0+YmVkX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmJlZF9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+YmVkX3ByaWNlWyRrZXldLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlcnZpY2VfbmFtZSAhPSBudWxsKSB7CgogICAgICAgICAgICBmb3JlYWNoICgkc2VydmljZV9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+c2VydmljZV9wcmljZVska2V5XSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmIChhdXRoKCktPnVzZXIoKS0+cHJvZmlsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRyZXF1ZXN0LT5hbGwoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvc2l0b3J5LT51cGRhdGVJbnZvaWNlKCR1dWlkLCAkZGF0YSwgJGRldGFpbHMsICRzZXJ2aWNlX2lkKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmluZGV4JyktPndpdGgoJ3N1Y2Nlc3MnLCAnQmlsbGluZyBJbnZvaWNlIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVc2VyIGRvZXMgbm90IGhhdmUgYSBuYW1lIGluIHN5c3RlbScpOwogICAgICAgICAgICB9CgogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCk7CgogICAgICAgIH0KCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3koJHV1aWQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBTbWFydEJpbGxpbmc6OnF1ZXJ5KCktPndoZXJlKCdpZCcsICR1dWlkKS0+ZGVsZXRlKCk7CgogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmluZGV4JyktPndpdGgoJ3N1Y2Nlc3MnLCAnVGVzdCBJbnZvaWNlIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5Jyk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpLT53aXRoRXJyb3JzKFsnZXJyb3JzJyA9PiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICB9CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwZGYoJGludm9pY2VOdW1iZXIpIHsKICAgICAgICAkc21hcnRfYmlsbGluZyA9IFNtYXJ0QmlsbGluZzo6cXVlcnkoKS0+d2l0aCgncGF0aWVudCcpLT53aGVyZSgnaW52b2ljZV9udW1iZXInLCAkaW52b2ljZU51bWJlciktPmZpcnN0KCk7CiAgICAgICAgJHNldHRpbmcgICAgICAgPSBTZXR0aW5nOjpmaW5kKDEpOwoKICAgICAgICByZXR1cm4gdmlldygnYWNjb3VudE1hbmFnZXIuaW52b2ljZS5wYXRpZW50LWJpbGxpbmctaW52b2ljZS5wYXRpZW50QmlsbGluZ0ludm9pY2VQZGYnLCBjb21wYWN0KCdzbWFydF9iaWxsaW5nJywgJ3NldHRpbmcnKSk7CgogICAgICAgIHJldHVybiB2aWV3KCdhY2NvdW50TWFuYWdlci5pbnZvaWNlLnBhdGllbnQtYmlsbGluZy1pbnZvaWNlLnBhdGllbnRCaWxsaW5nSW52b2ljZVBkZicsIGNvbXBhY3QoJ3NtYXJ0QmlsbCcsICdzZXR0aW5ncycpKTsKICAgICAgICAkbXBkZiA9IG5ldyBNcGRmKFsKICAgICAgICAgICAgJ2Zvcm1hdCcgICAgICAgID0+ICdBNCcsCiAgICAgICAgICAgICdtYXJnaW5fdG9wJyAgICA9PiAzMCwKICAgICAgICAgICAgJ21hcmdpbl9sZWZ0JyAgID0+IDEwLAogICAgICAgICAgICAnbWFyZ2luX3JpZ2h0JyAgPT4gMTAsCiAgICAgICAgICAgICdtYXJnaW5fYm90dG9tJyA9PiAxMCwKICAgICAgICBdKTsKCiAgICAgICAgJGZpbGVOYW1lICAgID0gJ0ludm9pY2VfJyAuICRpbnZvaWNlTnVtYmVyIC4gJ3BkZic7CiAgICAgICAgJGh0bWwgICAgICAgID0gXHZpZXcoJ2FjY291bnRNYW5hZ2VyLmludm9pY2UucGF0aWVudC1iaWxsaW5nLWludm9pY2UucGF0aWVudEJpbGxpbmdJbnZvaWNlUGRmJywgY29tcGFjdCgnc21hcnRCaWxsJywgJ3NldHRpbmdzJykpOwogICAgICAgICRodG1sICAgICAgICA9ICRodG1sLT5yZW5kZXIoKTsKICAgICAgICAkc3R5bGVzaGVldDEgPSBmaWxlX2dldF9jb250ZW50cyhwdWJsaWNfcGF0aCgnYXNzZXRzL2Nzcy90ZXN0SW52b2ljZVBkZi5jc3MnKSk7CiAgICAgICAgJG1wZGYtPlNldFRpdGxlKCRpbnZvaWNlTnVtYmVyKTsKICAgICAgICAkbXBkZi0+V3JpdGVIVE1MKCRzdHlsZXNoZWV0MSwgMSk7CiAgICAgICAgJG1wZGYtPldyaXRlSFRNTCgkaHRtbCwgMCk7CiAgICAgICAgJG1wZGYtPk91dHB1dCgkZmlsZU5hbWUsICdJJyk7CiAgICB9Cgp9Cg== ?>

Did this file decode correctly?

Original Code

PD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xJbnZvaWNlOwoKdXNlIEFwcFxIdHRwXENvbnRyb2xsZXJzXENvbnRyb2xsZXI7CnVzZSBBcHBcSHR0cFxSZXF1ZXN0c1xQYXRpZW50QmlsbGluZ0ludm9pY2VSZXF1ZXN0Owp1c2UgQXBwXE1vZGVsc1xCZWRMaXN0Owp1c2UgQXBwXE1vZGVsc1xQYXRpZW50Owp1c2UgQXBwXE1vZGVsc1xQYXRpZW50QmlsbGluZ0ludm9pY2U7CnVzZSBBcHBcTW9kZWxzXFBheW1lbnQ7CnVzZSBBcHBcTW9kZWxzXFNlcnZpY2U7CnVzZSBBcHBcTW9kZWxzXFNldHRpbmc7CnVzZSBBcHBcTW9kZWxzXFNtYXJ0QmlsbGluZzsKdXNlIEFwcFxSZXBvc2l0b3J5XFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDYXJib25cQ2FyYm9uOwp1c2UgRXhjZXB0aW9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcREI7CnVzZSBNcGRmXE1wZGY7CnVzZSBZYWpyYVxEYXRhVGFibGVzXEZhY2FkZXNcRGF0YVRhYmxlczsKCmNsYXNzIFBhdGllbnRCaWxsaW5nSW52b2ljZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHsKICAgIHByaXZhdGUgJHJlcG9zaXRvcnk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zaXRvcnkpIHsKICAgICAgICAkdGhpcy0+cmVwb3NpdG9yeSA9ICRyZXBvc2l0b3J5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChQYXRpZW50QmlsbGluZ0ludm9pY2VSZXF1ZXN0ICRyZXF1ZXN0KSB7CiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmICgkcmVxdWVzdC0+YWpheCgpKSB7CiAgICAgICAgICAgICAgICAvKiRkYXRhID0gUGF0aWVudEJpbGxpbmdJbnZvaWNlOjpsYXRlc3QoKS0+Z2V0KCk7Ki8KICAgICAgICAgICAgICAgICRkYXRhID0gU21hcnRCaWxsaW5nOjpxdWVyeSgpLT5sYXRlc3QoKS0+bGltaXQoNTAwMCktPmdldCgpOwoKICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVGFibGVzOjpvZigkZGF0YSkKICAgICAgICAgICAgICAgICAgICAtPmFkZEluZGV4Q29sdW1uKCkKICAgICAgICAgICAgICAgICAgICAtPmFkZENvbHVtbignbmFtZScsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmX25hbWUgPSAkcm93LT5wYXRpZW50WydmaXJzdF9uYW1lJ10gPz8gJy0nOwogICAgICAgICAgICAgICAgICAgICAgICAkbF9uYW1lID0gJHJvdy0+cGF0aWVudFsnbGFzdF9uYW1lJ10gPz8gJy0nOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmX25hbWUgLiAnICcgLiAkbF9uYW1lOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ3BpZCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT5wYXRpZW50WydwaWQnXSA/PyAnTi9BJzsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC0+YWRkQ29sdW1uKCd0b3RhbCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT50b3RhbEFtb3VudCA/PyAnTi9BJzsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC0+YWRkQ29sdW1uKCd2YXQnLCBmdW5jdGlvbiAoJHJvdykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJvdy0+dmF0ID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ2Rpc2NvdW50JywgZnVuY3Rpb24gKCRyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyb3ctPmRpc2NvdW50ID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ25ldF90b3RhbCcsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcm93LT5uZXRQYXlhYmxlID8/ICdOL0EnOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5hZGRDb2x1bW4oJ2FjdGlvbicsIGZ1bmN0aW9uICgkcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRidG4gPSAnPGEgaHJlZj0iJyAuIHJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5wZGYnLCAkcm93LT5pbnZvaWNlX251bWJlcikgLiAnIiBjbGFzcz0iYnRuIGJ0bi1pbmZvIGJ0bi10YWJsZSI+PGkgY2xhc3M9ImZhIGZhLWZpbGUtcGRmLW8gZi0xNiI+PC9pPjwvYT4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KGF1dGgoKS0+dXNlcigpLT5yb2xlX2lkLCBbJzEnLCAnMiddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ0biAuPSAnPGEgaHJlZj0iJyAuIHJvdXRlKCdlZGl0LnNtYXJ0LWJpbGwnLCAkcm93LT5pZCkgLiAnIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi10YWJsZSI+PGkgY2xhc3M9Imljb24tcGVuY2lsLWFsdCBmLTE2Ij48L2k+PC9hPjxidXR0b24gZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI2RhbmdlciIgb25jbGljaz0ib25EZWxldGUodGhpcykiIGlkPSInIC4gcm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmRlc3Ryb3knLCAkcm93LT5pZCkgLiAnIiBuYW1lPSJkZWxCdG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIgYnRuLXRhYmxlIGYtMTYgZGVsIj48aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyBmLTE2IGRlbCI+PC9pPjwvYnV0dG9uPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkYnRuOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5yYXdDb2x1bW5zKFsnYWN0aW9uJ10pCiAgICAgICAgICAgICAgICAgICAgLT5tYWtlKHRydWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdmlldygnYWNjb3VudE1hbmFnZXIuaW52b2ljZS5wYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgfQoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZWRpdCgkdXVpZCkgewogICAgICAgICRwYXRpZW50ICAgICAgICA9IFBhdGllbnQ6OndoZXJlKCd1dWlkJywgJHV1aWQpLT53aXRoKCdwYWNrYWdlJyktPmZpcnN0KCk7CiAgICAgICAgJGJlZHMgICAgICAgICAgID0gQmVkTGlzdDo6YWxsKCk7CiAgICAgICAgJGJlZF9hc3NpZ25lZCAgID0gREI6OnRhYmxlKCdwYXRpZW50X2hpc3RvcmllcycpLT53aGVyZSgncGF0aWVudF9pZCcsICRwYXRpZW50LT5pZCktPndoZXJlKCdjYXRlZ29yeScsICdCRUQnKS0+d2hlcmUoJ3R5cGUnLCAnQXNzaWduZWQnKS0+d2hlcmVCZXR3ZWVuKCd0aW1lJywgWyRwYXRpZW50LT5hZG1pdF9kYXRlLCBDYXJib246Om5vdygpXSktPmdldCgpOwogICAgICAgICRiZWRfdW5hc3NpZ25lZCA9IERCOjp0YWJsZSgncGF0aWVudF9oaXN0b3JpZXMnKS0+d2hlcmUoJ3BhdGllbnRfaWQnLCAkcGF0aWVudC0+aWQpLT53aGVyZSgnY2F0ZWdvcnknLCAnQkVEJyktPndoZXJlKCd0eXBlJywgJ1VuYXNzaWduZWQnKS0+d2hlcmVCZXR3ZWVuKCd0aW1lJywgWyRwYXRpZW50LT5hZG1pdF9kYXRlLCBDYXJib246Om5vdygpXSktPmdldCgpOwogICAgICAgICRpbnZvaWNlICAgICAgICA9IFBhdGllbnRCaWxsaW5nSW52b2ljZTo6d2hlcmUoJ3BhdGllbnRfaWQnLCAkcGF0aWVudC0+aWQpLT53aGVyZUJldHdlZW4oJ2NyZWF0ZWRfYXQnLCBbJHBhdGllbnQtPmFkbWl0X2RhdGUsIENhcmJvbjo6bm93KCldKS0+Zmlyc3QoKTsKCiAgICAgICAgaWYgKCRpbnZvaWNlICE9IG51bGwpIHsKICAgICAgICAgICAgJHBheW1lbnQgPSBQYXltZW50Ojp3aGVyZSgncmVmZXJlbmNlX251bWJlcicsICdiaWxsaW5nLScgLiAkaW52b2ljZS0+aW52b2ljZV9udW1iZXIpLT5maXJzdCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXltZW50ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICRwYXRpZW50X3NlcnZpY2VzID0gREI6OnRhYmxlKCdwYXRpZW50X3NlcnZpY2VzJyktPndoZXJlKCdwYXRpZW50X2lkJywgJHBhdGllbnQtPmlkKS0+d2hlcmVCZXR3ZWVuKCdzZXJ2aWNlX2RhdGUnLCBbJHBhdGllbnQtPmFkbWl0X2RhdGUsIENhcmJvbjo6bm93KCldKS0+Z2V0KCk7CiAgICAgICAgJHNlcnZpY2VzICAgICAgICAgPSBTZXJ2aWNlOjphbGwoKTsKCiAgICAgICAgcmV0dXJuIHZpZXcoJ2FjY291bnRNYW5hZ2VyLmludm9pY2UucGF0aWVudC1iaWxsaW5nLWludm9pY2UuZWRpdCcsIFsncGF0aWVudCcgPT4gJHBhdGllbnQsICdiZWRfYXNzaWduZWQnID0+ICRiZWRfYXNzaWduZWQsICdiZWRfdW5hc3NpZ25lZCcgPT4gJGJlZF91bmFzc2lnbmVkLCAnYmVkcycgPT4gJGJlZHMsICdzZXJ2aWNlcycgPT4gJHNlcnZpY2VzLCAnaW52b2ljZScgPT4gJGludm9pY2UsICdwYXltZW50JyA9PiAkcGF5bWVudCwgJ3BhdGllbnRfc2VydmljZXMnID0+ICRwYXRpZW50X3NlcnZpY2VzXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlKFBhdGllbnRCaWxsaW5nSW52b2ljZVJlcXVlc3QgJHJlcXVlc3QpIHsKICAgICAgICAkc2VydmljZV9uYW1lID0gW107CiAgICAgICAgJHNlcnZpY2VfaWQgICA9IFtdOwoKICAgICAgICBpZiAoJHJlcXVlc3QtPnNlcnZpY2VfaWRbMF0gIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnNlcnZpY2VfaWQgYXMgJHNlcnZpY2UpIHsKCiAgICAgICAgICAgICAgICBpZiAoJHNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRpdGVtID0gZXhwbG9kZSgnLScsICRzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzZXJ2aWNlX2lkLCAkaXRlbVswXSk7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc2VydmljZV9uYW1lLCAkaXRlbVsxXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgJGRldGFpbHMgPSBbXTsKCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5wYWNrYWdlX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnBhY2thZ2VfbmFtZSBhcyAka2V5ID0+ICR0aXRsZSkgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZGV0YWlscywgWwogICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJHRpdGxlLAogICAgICAgICAgICAgICAgICAgICdwcmljZScgPT4gJHJlcXVlc3QtPnBhY2thZ2VfcHJpY2VbJGtleV0sCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGlmICgkcmVxdWVzdC0+YmVkX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmJlZF9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+YmVkX3ByaWNlWyRrZXldLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlcnZpY2VfbmFtZSAhPSBudWxsKSB7CgogICAgICAgICAgICBmb3JlYWNoICgkc2VydmljZV9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+c2VydmljZV9wcmljZVska2V5XSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmIChhdXRoKCktPnVzZXIoKS0+cHJvZmlsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRyZXF1ZXN0LT5hbGwoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvc2l0b3J5LT5jcmVhdGVJbnZvaWNlKCRyZXF1ZXN0LCAkZGV0YWlscywgJHNlcnZpY2VfaWQpOwoKICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgncGF0aWVudC5pbmRleCcpLT53aXRoKCdzdWNjZXNzJywgJ0ludm9pY2UgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VzZXIgZG9lcyBub3QgaGF2ZSBhIG5hbWUgaW4gc3lzdGVtJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpLT53aXRoRXJyb3JzKFsnZXJyb3JzJyA9PiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICB9CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUGF0aWVudEJpbGxpbmdJbnZvaWNlUmVxdWVzdCAkcmVxdWVzdCwgJHV1aWQpIHsKICAgICAgICAkc2VydmljZV9uYW1lID0gW107CiAgICAgICAgJHNlcnZpY2VfaWQgICA9IFtdOwoKICAgICAgICBpZiAoJHJlcXVlc3QtPnNlcnZpY2VfaWRbMF0gIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnNlcnZpY2VfaWQgYXMgJHNlcnZpY2UpIHsKCiAgICAgICAgICAgICAgICBpZiAoJHNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRpdGVtID0gZXhwbG9kZSgnLScsICRzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRzZXJ2aWNlX2lkLCAkaXRlbVswXSk7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc2VydmljZV9uYW1lLCAkaXRlbVsxXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgJGRldGFpbHMgPSBbXTsKCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5wYWNrYWdlX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPnBhY2thZ2VfbmFtZSBhcyAka2V5ID0+ICR0aXRsZSkgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZGV0YWlscywgWwogICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJHRpdGxlLAogICAgICAgICAgICAgICAgICAgICdwcmljZScgPT4gJHJlcXVlc3QtPnBhY2thZ2VfcHJpY2VbJGtleV0sCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGlmICgkcmVxdWVzdC0+YmVkX25hbWUgIT0gbnVsbCkgewoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmJlZF9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+YmVkX3ByaWNlWyRrZXldLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoJHNlcnZpY2VfbmFtZSAhPSBudWxsKSB7CgogICAgICAgICAgICBmb3JlYWNoICgkc2VydmljZV9uYW1lIGFzICRrZXkgPT4gJHRpdGxlKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ3ByaWNlJyA9PiAkcmVxdWVzdC0+c2VydmljZV9wcmljZVska2V5XSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKCiAgICAgICAgICAgIGlmIChhdXRoKCktPnVzZXIoKS0+cHJvZmlsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9ICRyZXF1ZXN0LT5hbGwoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvc2l0b3J5LT51cGRhdGVJbnZvaWNlKCR1dWlkLCAkZGF0YSwgJGRldGFpbHMsICRzZXJ2aWNlX2lkKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmluZGV4JyktPndpdGgoJ3N1Y2Nlc3MnLCAnQmlsbGluZyBJbnZvaWNlIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVc2VyIGRvZXMgbm90IGhhdmUgYSBuYW1lIGluIHN5c3RlbScpOwogICAgICAgICAgICB9CgogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCk7CgogICAgICAgIH0KCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3koJHV1aWQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBTbWFydEJpbGxpbmc6OnF1ZXJ5KCktPndoZXJlKCdpZCcsICR1dWlkKS0+ZGVsZXRlKCk7CgogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ3BhdGllbnQtYmlsbGluZy1pbnZvaWNlLmluZGV4JyktPndpdGgoJ3N1Y2Nlc3MnLCAnVGVzdCBJbnZvaWNlIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5Jyk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdwYXRpZW50LWJpbGxpbmctaW52b2ljZS5pbmRleCcpLT53aXRoRXJyb3JzKFsnZXJyb3JzJyA9PiAkZXhjZXB0aW9uLT5nZXRNZXNzYWdlKCldKTsKICAgICAgICB9CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwZGYoJGludm9pY2VOdW1iZXIpIHsKICAgICAgICAkc21hcnRfYmlsbGluZyA9IFNtYXJ0QmlsbGluZzo6cXVlcnkoKS0+d2l0aCgncGF0aWVudCcpLT53aGVyZSgnaW52b2ljZV9udW1iZXInLCAkaW52b2ljZU51bWJlciktPmZpcnN0KCk7CiAgICAgICAgJHNldHRpbmcgICAgICAgPSBTZXR0aW5nOjpmaW5kKDEpOwoKICAgICAgICByZXR1cm4gdmlldygnYWNjb3VudE1hbmFnZXIuaW52b2ljZS5wYXRpZW50LWJpbGxpbmctaW52b2ljZS5wYXRpZW50QmlsbGluZ0ludm9pY2VQZGYnLCBjb21wYWN0KCdzbWFydF9iaWxsaW5nJywgJ3NldHRpbmcnKSk7CgogICAgICAgIHJldHVybiB2aWV3KCdhY2NvdW50TWFuYWdlci5pbnZvaWNlLnBhdGllbnQtYmlsbGluZy1pbnZvaWNlLnBhdGllbnRCaWxsaW5nSW52b2ljZVBkZicsIGNvbXBhY3QoJ3NtYXJ0QmlsbCcsICdzZXR0aW5ncycpKTsKICAgICAgICAkbXBkZiA9IG5ldyBNcGRmKFsKICAgICAgICAgICAgJ2Zvcm1hdCcgICAgICAgID0+ICdBNCcsCiAgICAgICAgICAgICdtYXJnaW5fdG9wJyAgICA9PiAzMCwKICAgICAgICAgICAgJ21hcmdpbl9sZWZ0JyAgID0+IDEwLAogICAgICAgICAgICAnbWFyZ2luX3JpZ2h0JyAgPT4gMTAsCiAgICAgICAgICAgICdtYXJnaW5fYm90dG9tJyA9PiAxMCwKICAgICAgICBdKTsKCiAgICAgICAgJGZpbGVOYW1lICAgID0gJ0ludm9pY2VfJyAuICRpbnZvaWNlTnVtYmVyIC4gJ3BkZic7CiAgICAgICAgJGh0bWwgICAgICAgID0gXHZpZXcoJ2FjY291bnRNYW5hZ2VyLmludm9pY2UucGF0aWVudC1iaWxsaW5nLWludm9pY2UucGF0aWVudEJpbGxpbmdJbnZvaWNlUGRmJywgY29tcGFjdCgnc21hcnRCaWxsJywgJ3NldHRpbmdzJykpOwogICAgICAgICRodG1sICAgICAgICA9ICRodG1sLT5yZW5kZXIoKTsKICAgICAgICAkc3R5bGVzaGVldDEgPSBmaWxlX2dldF9jb250ZW50cyhwdWJsaWNfcGF0aCgnYXNzZXRzL2Nzcy90ZXN0SW52b2ljZVBkZi5jc3MnKSk7CiAgICAgICAgJG1wZGYtPlNldFRpdGxlKCRpbnZvaWNlTnVtYmVyKTsKICAgICAgICAkbXBkZi0+V3JpdGVIVE1MKCRzdHlsZXNoZWV0MSwgMSk7CiAgICAgICAgJG1wZGYtPldyaXRlSFRNTCgkaHRtbCwgMCk7CiAgICAgICAgJG1wZGYtPk91dHB1dCgkZmlsZU5hbWUsICdJJyk7CiAgICB9Cgp9Cg==

Function Calls

None

Variables

None

Stats

MD5 9654ba4bf0422bc63a107a2b951eb228
Eval Count 0
Decode Time 128 ms