$b64 = 'PD9waHAKLyoqCiAqIEZ1bmNpb25lcyBoZWxwZXIgZGVsIHNpc3RlbWEKICovCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBTRUdVUklEQUQKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmZ1bmN0aW9uIHNhbml0aXplKCRkYXRhKSB7CiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycyhzdHJpcF90YWdzKHRyaW0oJGRhdGEpKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7Cn0KCmZ1bmN0aW9uIGdlbmVyYXRlVG9rZW4oJGxlbmd0aCA9IDY0KSB7CiAgICByZXR1cm4gYmluMmhleChyYW5kb21fYnl0ZXMoJGxlbmd0aCAvIDIpKTsKfQoKZnVuY3Rpb24gZ2VuZXJhdGVPcmRlck51bWJlcigkcHJlZml4ID0gJ1RPVCcpIHsKICAgIHJldHVybiAkcHJlZml4IC4gZGF0ZSgnWW1kJykgLiBzdHJfcGFkKG10X3JhbmQoMSwgOTk5OSksIDQsICcwJywgU1RSX1BBRF9MRUZUKTsKfQoKZnVuY3Rpb24gaGFzaFBhc3N3b3JkKCRwYXNzd29yZCkgewogICAgcmV0dXJuIHBhc3N3b3JkX2hhc2goJHBhc3N3b3JkLCBQQVNTV09SRF9CQ1JZUFQpOwp9CgpmdW5jdGlvbiB2ZXJpZnlQYXNzd29yZCgkcGFzc3dvcmQsICRoYXNoKSB7CiAgICByZXR1cm4gcGFzc3dvcmRfdmVyaWZ5KCRwYXNzd29yZCwgJGhhc2gpOwp9CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBTRVNJw5NOIFkgQ0FSUklUTwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZnVuY3Rpb24gaXNMb2dnZWRJbigpIHsKICAgIHJldHVybiBpc3NldCgkX1NFU1NJT05bJ2FkbWluX2lkJ10pICYmICRfU0VTU0lPTlsnYWRtaW5faWQnXSA+IDA7Cn0KCmZ1bmN0aW9uIHJlcXVpcmVMb2dpbigpIHsKICAgIGlmICghaXNMb2dnZWRJbigpKSB7CiAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuIEJBU0VfVVJMIC4gJy9hZG1pbi9sb2dpbicpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCmZ1bmN0aW9uIGdldENhcnQoKSB7CiAgICByZXR1cm4gJF9TRVNTSU9OWydjYXJ0J10gPz8gW107Cn0KCmZ1bmN0aW9uIHNldENhcnQoJGNhcnQpIHsKICAgICRfU0VTU0lPTlsnY2FydCddID0gJGNhcnQ7Cn0KCmZ1bmN0aW9uIGFkZFRvQ2FydCgkcHJvZHVjdElkLCAkZXh0cmFzID0gW10sICRxdWFudGl0eSA9IDEsICRub3RlcyA9ICcnKSB7CiAgICAkY2FydCA9IGdldENhcnQoKTsKICAgICRrZXkgPSAkcHJvZHVjdElkIC4gJy0nIC4gbWQ1KGpzb25fZW5jb2RlKCRleHRyYXMpKTsKICAgIAogICAgaWYgKGlzc2V0KCRjYXJ0WyRrZXldKSkgewogICAgICAgICRjYXJ0WyRrZXldWydxdWFudGl0eSddICs9ICRxdWFudGl0eTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGNhcnRbJGtleV0gPSBbCiAgICAgICAgICAgICdwcm9kdWN0X2lkJyA9PiAkcHJvZHVjdElkLAogICAgICAgICAgICAncXVhbnRpdHknID0+ICRxdWFudGl0eSwKICAgICAgICAgICAgJ2V4dHJhcycgPT4gJGV4dHJhcywKICAgICAgICAgICAgJ25vdGVzJyA9PiAkbm90ZXMKICAgICAgICBdOwogICAgfQogICAgCiAgICBzZXRDYXJ0KCRjYXJ0KTsKICAgIHJldHVybiAkY2FydDsKfQoKZnVuY3Rpb24gdXBkYXRlQ2FydEl0ZW0oJGtleSwgJHF1YW50aXR5KSB7CiAgICAkY2FydCA9IGdldENhcnQoKTsKICAgIGlmIChpc3NldCgkY2FydFska2V5XSkpIHsKICAgICAgICBpZiAoJHF1YW50aXR5IDw9IDApIHsKICAgICAgICAgICAgdW5zZXQoJGNhcnRbJGtleV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjYXJ0WyRrZXldWydxdWFudGl0eSddID0gJHF1YW50aXR5OwogICAgICAgIH0KICAgIH0KICAgIHNldENhcnQoJGNhcnQpOwogICAgcmV0dXJuICRjYXJ0Owp9CgpmdW5jdGlvbiByZW1vdmVGcm9tQ2FydCgka2V5KSB7CiAgICAkY2FydCA9IGdldENhcnQoKTsKICAgIHVuc2V0KCRjYXJ0WyRrZXldKTsKICAgIHNldENhcnQoJGNhcnQpOwogICAgcmV0dXJuICRjYXJ0Owp9CgpmdW5jdGlvbiBjbGVhckNhcnQoKSB7CiAgICBzZXRDYXJ0KFtdKTsKfQoKZnVuY3Rpb24gZ2V0Q2FydENvdW50KCkgewogICAgJGNhcnQgPSBnZXRDYXJ0KCk7CiAgICAkY291bnQgPSAwOwogICAgZm9yZWFjaCAoJGNhcnQgYXMgJGl0ZW0pIHsKICAgICAgICAkY291bnQgKz0gJGl0ZW1bJ3F1YW50aXR5J107CiAgICB9CiAgICByZXR1cm4gJGNvdW50Owp9CgpmdW5jdGlvbiBnZXRDYXJ0VG90YWwoJHBkbykgewogICAgJGNhcnQgPSBnZXRDYXJ0KCk7CiAgICAkdG90YWwgPSAwOwogICAgCiAgICBmb3JlYWNoICgkY2FydCBhcyAkaXRlbSkgewogICAgICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIHByaWNlIEZST00gcHJvZHVjdHMgV0hFUkUgaWQgPSA/Iik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyRpdGVtWydwcm9kdWN0X2lkJ11dKTsKICAgICAgICAkcHJvZHVjdCA9ICRzdG10LT5mZXRjaCgpOwogICAgICAgIAogICAgICAgIGlmICgkcHJvZHVjdCkgewogICAgICAgICAgICAkdG90YWwgKz0gJHByb2R1Y3RbJ3ByaWNlJ10gKiAkaXRlbVsncXVhbnRpdHknXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghZW1wdHkoJGl0ZW1bJ2V4dHJhcyddKSkgewogICAgICAgICAgICAgICAgJHBsYWNlaG9sZGVycyA9IGltcGxvZGUoJywnLCBhcnJheV9maWxsKDAsIGNvdW50KCRpdGVtWydleHRyYXMnXSksICc/JykpOwogICAgICAgICAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgcHJpY2UgRlJPTSBleHRyYXMgV0hFUkUgaWQgSU4gKCRwbGFjZWhvbGRlcnMpIik7CiAgICAgICAgICAgICAgICAkc3RtdC0+ZXhlY3V0ZSgkaXRlbVsnZXh0cmFzJ10pOwogICAgICAgICAgICAgICAgJGV4dHJhcyA9ICRzdG10LT5mZXRjaEFsbCgpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZXh0cmFzIGFzICRleHRyYSkgewogICAgICAgICAgICAgICAgICAgICR0b3RhbCArPSAkZXh0cmFbJ3ByaWNlJ10gKiAkaXRlbVsncXVhbnRpdHknXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuICR0b3RhbDsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gRk9STUFURU8KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmZ1bmN0aW9uIGZvcm1hdFByaWNlKCRhbW91bnQpIHsKICAgICRjdXJyZW5jeSA9ICckJzsKICAgIHJldHVybiAkY3VycmVuY3kgLiBudW1iZXJfZm9ybWF0KCRhbW91bnQsIDIpOwp9CgpmdW5jdGlvbiBnZXRTdGF0dXNMYWJlbCgkc3RhdHVzKSB7CiAgICAkbGFiZWxzID0gWwogICAgICAgICdwZW5kaW5nJyAgID0+ICc8c3BhbiBjbGFzcz0iYmFkZ2UgYmctd2FybmluZyB0ZXh0LWRhcmsiPlBlbmRpZW50ZTwvc3Bhbj4nLAogICAgICAgICdwcmVwYXJpbmcnID0+ICc8c3BhbiBjbGFzcz0iYmFkZ2UgYmctaW5mbyI+RW4gUHJlcGFyYWNpw7NuPC9zcGFuPicsCiAgICAgICAgJ3JlYWR5JyAgICAgPT4gJzxzcGFuIGNsYXNzPSJiYWRnZSBiZy1zdWNjZXNzIj5MaXN0bzwvc3Bhbj4nLAogICAgICAgICdjb21wbGV0ZWQnID0+ICc8c3BhbiBjbGFzcz0iYmFkZ2UgYmctc2Vjb25kYXJ5Ij5Db21wbGV0YWRvPC9zcGFuPicsCiAgICAgICAgJ2NhbmNlbGxlZCcgPT4gJzxzcGFuIGNsYXNzPSJiYWRnZSBiZy1kYW5nZXIiPkNhbmNlbGFkbzwvc3Bhbj4nLAogICAgXTsKICAgIHJldHVybiAkbGFiZWxzWyRzdGF0dXNdID8/ICc8c3BhbiBjbGFzcz0iYmFkZ2UgYmctc2Vjb25kYXJ5Ij5EZXNjb25vY2lkbzwvc3Bhbj4nOwp9CgpmdW5jdGlvbiBnZXRTdGF0dXNJY29uKCRzdGF0dXMpIHsKICAgICRpY29ucyA9IFsKICAgICAgICAncGVuZGluZycgICA9PiAnYmktY2xvY2snLAogICAgICAgICdwcmVwYXJpbmcnID0+ICdiaS1nZWFyJywKICAgICAgICAncmVhZHknICAgICA9PiAnYmktY2hlY2stY2lyY2xlJywKICAgICAgICAnY29tcGxldGVkJyA9PiAnYmktY2hlY2stYWxsJywKICAgICAgICAnY2FuY2VsbGVkJyA9PiAnYmkteC1jaXJjbGUnLAogICAgXTsKICAgIHJldHVybiAkaWNvbnNbJHN0YXR1c10gPz8gJ2JpLXF1ZXN0aW9uLWNpcmNsZSc7Cn0KCmZ1bmN0aW9uIGdldFN0YXR1c0NvbG9yKCRzdGF0dXMpIHsKICAgICRjb2xvcnMgPSBbCiAgICAgICAgJ3BlbmRpbmcnICAgPT4gJyNmNTllMGInLAogICAgICAgICdwcmVwYXJpbmcnID0+ICcjM2I4MmY2JywKICAgICAgICAncmVhZHknICAgICA9PiAnIzEwYjk4MScsCiAgICAgICAgJ2NvbXBsZXRlZCcgPT4gJyM2YjcyODAnLAogICAgICAgICdjYW5jZWxsZWQnID0+ICcjZWY0NDQ0JywKICAgIF07CiAgICByZXR1cm4gJGNvbG9yc1skc3RhdHVzXSA/PyAnIzZiNzI4MCc7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIEZMQVNIIE1FU1NBR0VTCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpmdW5jdGlvbiBzZXRGbGFzaCgkdHlwZSwgJG1lc3NhZ2UpIHsKICAgICRfU0VTU0lPTlsnZmxhc2gnXVskdHlwZV0gPSAkbWVzc2FnZTsKICAgIHNlc3Npb25fd3JpdGVfY2xvc2UoKTsKfQoKZnVuY3Rpb24gZ2V0Rmxhc2goJHR5cGUpIHsKICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ2ZsYXNoJ11bJHR5cGVdKSkgewogICAgICAgICRtZXNzYWdlID0gJF9TRVNTSU9OWydmbGFzaCddWyR0eXBlXTsKICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2ZsYXNoJ11bJHR5cGVdKTsKICAgICAgICByZXR1cm4gJG1lc3NhZ2U7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKfQoKZnVuY3Rpb24gcmVuZGVyRmxhc2goKSB7CiAgICBmb3JlYWNoIChbJ3N1Y2Nlc3MnLCAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJ10gYXMgJHR5cGUpIHsKICAgICAgICAkbWVzc2FnZSA9IGdldEZsYXNoKCR0eXBlKTsKICAgICAgICBpZiAoJG1lc3NhZ2UpIHsKICAgICAgICAgICAgJGFsZXJ0Q2xhc3MgPSAkdHlwZSA9PT0gJ2Vycm9yJyA/ICdkYW5nZXInIDogJHR5cGU7CiAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J2FsZXJ0IGFsZXJ0LXskYWxlcnRDbGFzc30gYWxlcnQtZGlzbWlzc2libGUgZmFkZSBzaG93JyByb2xlPSdhbGVydCc+IjsKICAgICAgICAgICAgZWNobyBzYW5pdGl6ZSgkbWVzc2FnZSk7CiAgICAgICAgICAgIGVjaG8gIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0nYnRuLWNsb3NlJyBkYXRhLWJzLWRpc21pc3M9J2FsZXJ0Jz48L2J1dHRvbj4iOwogICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgIH0KICAgIH0KfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUkVTUFVFU1RBUyBKU09OCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpmdW5jdGlvbiBqc29uUmVzcG9uc2UoJGRhdGEsICRzdGF0dXNDb2RlID0gMjAwKSB7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoJHN0YXR1c0NvZGUpOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOwogICAgZXhpdDsKfQoKZnVuY3Rpb24ganNvbkVycm9yKCRtZXNzYWdlLCAkc3RhdHVzQ29kZSA9IDQwMCkgewogICAganNvblJlc3BvbnNlKFsnc3VjY2VzcycgPT4gZmFsc2UsICdtZXNzYWdlJyA9PiAkbWVzc2FnZV0sICRzdGF0dXNDb2RlKTsKfQoKZnVuY3Rpb24ganNvblN1Y2Nlc3MoJGRhdGEgPSBudWxsLCAkbWVzc2FnZSA9ICdPSycpIHsKICAgIGpzb25SZXNwb25zZShbJ3N1Y2Nlc3MnID0+IHRydWUsICdtZXNzYWdlJyA9PiAkbWVzc2FnZSwgJ2RhdGEnID0+ICRkYXRhXSk7Cn0K' [IO.File]::WriteAllBytes('/home/totem/public_html/totem/helpers/functions.php', [Convert]::FromBase64String($b64)) echo 'Updated: ' . strlen(file_get_contents('/home/totem/public_html/totem/helpers/functions.php')) . ' bytes'