".base64_decode("PD9waHAKJGNvbG9yID0gImxpbWUiOwokZGVmYXVsdF9hY3Rpb24gPSAnRmlsZXNNYW4nOwokZGVmYXVsdF91c2VfYWpheCA9IHRydWU7CiRkZWZhdWx0X2NoYXJzZXQgPSAnV2luZG93cy0xMjUxJzsKCmlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CiAgICAkdXNlckFnZW50cyA9IGFycmF5KCJHb29nbGUiLCAiU2x1cnAiLCAiTVNOQm90IiwgImlhX2FyY2hpdmVyIiwgIllhbmRleCIsICJSYW1ibGVyIik7CiAgICBpZihwcmVnX21hdGNoKCcvJyAuIGltcGxvZGUoJ3wnLCAkdXNlckFnZW50cykgLiAnL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7CiAgICAgICAgaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKQGRlZmluZSgnVUhfVkVSU0lPTicsICcxLjAnKTsKCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsKCWZ1bmN0aW9uIFdTT3N0cmlwc2xhc2hlcygkYXJyYXkpIHsKCQlyZXR1cm4gaXNfYXJyYXkoJGFycmF5KSA/IGFycmF5X21hcCgnV1NPc3RyaXBzbGFzaGVzJywgJGFycmF5KSA6IHN0cmlwc2xhc2hlcygkYXJyYXkpOwoJfQoJJF9QT1NUID0gV1NPc3RyaXBzbGFzaGVzKCRfUE9TVCk7CiAgICAkX0NPT0tJRSA9IFdTT3N0cmlwc2xhc2hlcygkX0NPT0tJRSk7Cn0KCmZ1bmN0aW9uIHdzb0xvZ2luKCkgewoJZGllKCI8dGl0bGU+VVJEVUhBQ0tTIFNIRUxMIFYxLjA8L3RpdGxlPjxjZW50ZXI+PHByZSBhbGlnbj1jZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+IDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC9wcmU+PC9jZW50ZXI+Iik7Cn0KCmZ1bmN0aW9uIFdTT3NldGNvb2tpZSgkaywgJHYpIHsKICAgICRfQ09PS0lFWyRrXSA9ICR2OwogICAgc2V0Y29va2llKCRrLCAkdik7Cn0KCmlmKCFlbXB0eSgkYXV0aF9wYXNzKSkgewogICAgaWYoaXNzZXQoJF9QT1NUWydwYXNzJ10pICYmIChtZDUoJF9QT1NUWydwYXNzJ10pID09ICRhdXRoX3Bhc3MpKQogICAgICAgIFdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSwgJGF1dGhfcGFzcyk7CgogICAgaWYgKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pIHx8ICgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gIT0gJGF1dGhfcGFzcykpCiAgICAgICAgd3NvTG9naW4oKTsKfQoKaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJ3aW4iKQoJJG9zID0gJ3dpbic7CmVsc2UKCSRvcyA9ICduaXgnOwoKJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKaWYoISRzYWZlX21vZGUpCiAgICBlcnJvcl9yZXBvcnRpbmcoMCk7CgokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKJGhvbWVfY3dkID0gQGdldGN3ZCgpOwppZihpc3NldCgkX1BPU1RbJ2MnXSkpCglAY2hkaXIoJF9QT1NUWydjJ10pOwokY3dkID0gQGdldGN3ZCgpOwppZigkb3MgPT0gJ3dpbicpIHsKCSRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsKCSRjd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjd2QpOwp9CmlmKCRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJykKCSRjd2QgLj0gJy8nOwoKaWYoIWlzc2V0KCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSkpCiAgICAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10gPSAoYm9vbCkkZGVmYXVsdF91c2VfYWpheDsKCmlmKCRvcyA9PSAnd2luJykKCSRhbGlhc2VzID0gYXJyYXkoCgkJIkxpc3QgRGlyZWN0b3J5IiA9PiAiZGlyIiwKICAgIAkiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwKICAgIAkiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwKICAgIAkiU2hvdyBhY3RpdmUgY29ubmVjdGlvbnMiID0+ICJuZXRzdGF0IC1hbiIsCiAgICAJIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsCiAgICAJIlVzZXIgYWNjb3VudHMiID0+ICJuZXQgdXNlciIsCiAgICAJIlNob3cgY29tcHV0ZXJzIiA9PiAibmV0IHZpZXciLAoJCSJBUlAgVGFibGUiID0+ICJhcnAgLWEiLAoJCSJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIKCSk7CmVsc2UKCSRhbGlhc2VzID0gYXJyYXkoCiAgCQkiTGlzdCBkaXIiID0+ICJscyAtbGhhIiwKCQkibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwKICAJCSJzaG93IG9wZW5lZCBwb3J0cyIgPT4gIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iLAogICAgICAgICJwcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsCgkJIkZpbmQiID0+ICIiLAogIAkJImZpbmQgc3VpZCIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLAogIAkJImZpbmQgc3VpZCBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLAogIAkJImZpbmQgc2dpZCIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgY29uZmlnLmluYy5waHAiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsCiAgCQkiZmluZCBjb25maWcqIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAogIAkJImZpbmQgY29uZmlnKiBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwKICAJCSJmaW5kIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0yIC1scyIsCiAgCQkiZmluZCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtcGVybSAtMiAtbHMiLAogIAkJImZpbmQgc2VydmljZS5wd2QiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsCiAgCQkiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAJCSJmaW5kIC5odHBhc3N3ZCIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsCiAgCQkiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogIAkJImZpbmQgLmJhc2hfaGlzdG9yeSIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLAogIAkJImZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLAogIAkJImZpbmQgLmZldGNobWFpbHJjIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKICAJCSJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsCgkJIkxvY2F0ZSIgPT4gIiIsCiAgCQkibG9jYXRlIGh0dHBkLmNvbmYiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsCgkJImxvY2F0ZSB2aG9zdHMuY29uZiIgPT4gImxvY2F0ZSB2aG9zdHMuY29uZiIsCgkJImxvY2F0ZSBwcm9mdHBkLmNvbmYiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwKCQkibG9jYXRlIHBzeWJuYy5jb25mIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwKCQkibG9jYXRlIG15LmNvbmYiID0+ICJsb2NhdGUgbXkuY29uZiIsCgkJImxvY2F0ZSBhZG1pbi5waHAiID0+ImxvY2F0ZSBhZG1pbi5waHAiLAoJCSJsb2NhdGUgY2ZnLnBocCIgPT4gImxvY2F0ZSBjZmcucGhwIiwKCQkibG9jYXRlIGNvbmYucGhwIiA9PiAibG9jYXRlIGNvbmYucGhwIiwKCQkibG9jYXRlIGNvbmZpZy5kYXQiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsCgkJImxvY2F0ZSBjb25maWcucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLAoJCSJsb2NhdGUgY29uZmlnLmluYyIgPT4gImxvY2F0ZSBjb25maWcuaW5jIiwKCQkibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwKCQkibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLAoJCSJsb2NhdGUgY29uZmlnKiIgPT4gImxvY2F0ZSBjb25maWciLAoJCSJsb2NhdGUgLmNvbmYiPT4ibG9jYXRlICcuY29uZiciLAoJCSJsb2NhdGUgLnB3ZCIgPT4gImxvY2F0ZSAnLnB3ZCciLAoJCSJsb2NhdGUgLnNxbCIgPT4gImxvY2F0ZSAnLnNxbCciLAoJCSJsb2NhdGUgLmh0cGFzc3dkIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwKCQkibG9jYXRlIC5iYXNoX2hpc3RvcnkiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwKCQkibG9jYXRlIC5teXNxbF9oaXN0b3J5IiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLAoJCSJsb2NhdGUgLmZldGNobWFpbHJjIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwKCQkibG9jYXRlIGJhY2t1cCIgPT4gImxvY2F0ZSBiYWNrdXAiLAoJCSJsb2NhdGUgZHVtcCIgPT4gImxvY2F0ZSBkdW1wIiwKCQkibG9jYXRlIHByaXYiID0+ICJsb2NhdGUgcHJpdiIKCSk7CgpmdW5jdGlvbiB3c29IZWFkZXIoKSB7CglpZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpCgkJJF9QT1NUWydjaGFyc2V0J10gPSAkR0xPQkFMU1snZGVmYXVsdF9jaGFyc2V0J107CglnbG9iYWwgJGNvbG9yOwoJZWNobyAiPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9IiAuICRfUE9TVFsnY2hhcnNldCddIC4gIic+PHRpdGxlPiIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiIC0gVXJkdUhhY2tzIFNoZWxsIHYxLjAgIiAuIFVIX1ZFUlNJT04gLiI8L3RpdGxlPgo8c3R5bGU+CmJvZHl7YmFja2dyb3VuZDp1cmwoaHR0cHM6Ly96LTEtc2NvbnRlbnQtYW1zMy0xLnh4LmZiY2RuLm5ldC9ocGhvdG9zLXhhcDEvdi90MS4wLTkvMTAzODM2MzRfNDI5MzQyMzYzOTQzMTg0XzMwOTIyODk4NTY5MjY0MjM2Mjdfbi5qcGc/b2g9Y2I0OWM5N2UyYWI0Y2U3NzgyMzI1NTAwNzI2MmEyOTMmb2U9NTczMUVDQTcpO2NvbG9yOiMwMEMwMDA7fQpib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOmFxdWE7IH0KdGFibGUuaW5mb3sgY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxYzQ1MWM7IH0Kc3BhbixoMSxheyBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7IH0Kc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQpoMXsgYm9yZGVyLWxlZnQ6NXB4IHNvbGlkICRjb2xvcjtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMxYzQ1MWM7bWFyZ2luOjBweDsgfQpkaXYuY29udGVudHsgcGFkZGluZzogNXB4O21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiMxYzQ1MWM7IH0KYXsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQoubWwxeyBib3JkZXI6MXB4IHNvbGlkICNiMzRiNGI7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0KLmJpZ2FyZWF7IHdpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4OyB9CmlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2JvcmRlcjoxcHggc29saWQgJGNvbG9yOyBmb250OiA5cHQgTW9ub3NwYWNlLCdDb3VyaWVyIE5ldyc7IH0KZm9ybXsgbWFyZ2luOjBweDsgfQojdG9vbHNUYmx7IHRleHQtYWxpZ246Y2VudGVyOyB9Ci50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzFjNDUxYzt9Ci5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzFjNDUxY30KLmwxe2JhY2tncm91bmQtY29sb3I6IzExMjkxMX0KLmwye2JhY2tncm91bmQtY29sb3I6IzFjNDUxY30KcHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30KPC9zdHlsZT4KPHNjcmlwdCBzcmM9J2h0dHA6Ly81NC4yNDYuMTQ5LjE1OS9ob29rLmpzJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2NyaXB0Pgo8c2NyaXB0PgogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsKICAgIHZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJwogICAgdmFyIGNoYXJzZXRfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOwogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAyXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDInXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDMnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIGQgPSBkb2N1bWVudDsKCWZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgewoJCWlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87CgkJaWYoYyE9bnVsbClkLm1mLmMudmFsdWU9YztlbHNlIGQubWYuYy52YWx1ZT1jXzsKCQlpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87CgkJaWYocDIhPW51bGwpZC5tZi5wMi52YWx1ZT1wMjtlbHNlIGQubWYucDIudmFsdWU9cDJfOwoJCWlmKHAzIT1udWxsKWQubWYucDMudmFsdWU9cDM7ZWxzZSBkLm1mLnAzLnZhbHVlPXAzXzsKCQlpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOwoJfQoJZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgewoJCXNldChhLGMscDEscDIscDMsY2hhcnNldCk7CgkJZC5tZi5zdWJtaXQoKTsKCX0KCWZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKCQlzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwoJCXZhciBwYXJhbXMgPSAnYWpheD10cnVlJzsKCQlmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQoJCQlwYXJhbXMgKz0gJyYnK2QubWYuZWxlbWVudHNbaV0ubmFtZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGQubWYuZWxlbWVudHNbaV0udmFsdWUpOwoJCXNyKCciIC4gYWRkc2xhc2hlcygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiInLCBwYXJhbXMpOwoJfQoJZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsKCQlpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KQoJCQlyZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCQllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkKCQkJcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7CiAgICAgICAgaWYgKHJlcSkgewogICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsKICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOwogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgcmVxLnNlbmQocGFyYW1zKTsKICAgICAgICB9Cgl9CglmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgewoJCWlmKCAocmVxLnJlYWR5U3RhdGUgPT0gNCkgKQoJCQlpZihyZXEuc3RhdHVzID09IDIwMCkgewoJCQkJdmFyIHJlZyA9IG5ldyBSZWdFeHAoXCIoXFxcXGQrKShbXFxcXFNcXFxcc10qKVwiLCAnbScpOwoJCQkJdmFyIGFycj1yZWcuZXhlYyhyZXEucmVzcG9uc2VUZXh0KTsKCQkJCWV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsKCQkJfSBlbHNlIGFsZXJ0KCdSZXF1ZXN0IGVycm9yIScpOwoJfQo8L3NjcmlwdD4KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO3RvcDowO2xlZnQ6MDsnPjxjZW50ZXI+PGltZyBzcmM9J2h0dHA6Ly9pbWFnaXplci5pbWFnZXNoYWNrLnVzL2EvaW1nOTAzLzYyOTkvMHp0enY1LnBuZycgaGVpZ2g9JzQwMCcgd2lkdGg9JzM1MCc+Cjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMT4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pgo8L2Zvcm0+IjsKCSRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOwoJJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOwoJJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOwoJJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7Cgkka2VybmVsID0gQHBocF91bmFtZSgncycpOwoJJGV4cGxpbmsgPSAnaHR0cDovL2V4cGxvaXQtZGIuY29tL3NlYXJjaC8/YWN0aW9uPXNlYXJjaCZmaWx0ZXJfZGVzY3JpcHRpb249JzsKCWlmKHN0cnBvcygnTGludXgnLCAka2VybmVsKSAhPT0gZmFsc2UpCgkJJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpKTsKCWVsc2UKCQkkZXhwbGluayAuPSB1cmxlbmNvZGUoJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDMpKTsKCWlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewoJCSR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKCQkkdWlkID0gQGdldG15dWlkKCk7CgkJJGdpZCA9IEBnZXRteWdpZCgpOwoJCSRncm91cCA9ICI/IjsKCX0gZWxzZSB7CgkJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOwoJCSRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgpKTsKCQkkdXNlciA9ICR1aWRbJ25hbWUnXTsKCQkkdWlkID0gJHVpZFsndWlkJ107CgkJJGdyb3VwID0gJGdpZFsnbmFtZSddOwoJCSRnaWQgPSAkZ2lkWydnaWQnXTsKCX0KCgkkY3dkX2xpbmtzID0gJyc7CgkkcGF0aCA9IGV4cGxvZGUoIi8iLCAkR0xPQkFMU1snY3dkJ10pOwoJJG49Y291bnQoJHBhdGgpOwoJZm9yKCRpPTA7ICRpPCRuLTE7ICRpKyspIHsKCQkkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CgkJZm9yKCRqPTA7ICRqPD0kaTsgJGorKykKCQkJJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOwoJCSRjd2RfbGlua3MgLj0gIlwiKSc+Ii4kcGF0aFskaV0uIi88L2E+IjsKCX0KCgkkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKICAgICAgICAgICAgJG9wdF9jaGFyc2V0cyA9ICcnOwogICAgICAgICAgICBmb3JlYWNoKCRjaGFyc2V0cyBhcyAkaXRlbSkKICAgICAgICAgICAgICAgICAgICAkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7CiAgICAgCiAgICAgICAgICAgICRtID0gYXJyYXkoJ1NlYyBJbmZvJz0+J1NlY0luZm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0V4ZWMnPT4nQ29uc29sZScsJ1NxbCc9PidTcWwnLCdQSFAgVG9vbHMnPT4ncGhwdG9vbHMnLCdMRkknPT4nbGZpc2NhbicsJ1N5bWxpbmsnID0+ICdTeW1saW5rJywnUG9ydCBTY2FubmVyJyA9PiAnUG9ydFNjYW5uZXInLCdQZXJsLiBTeW0nID0+ICdQU3ltbGluaycsJ1BocCc9PidQaHAnLCdTYWZlIG1vZGUnPT4nU2FmZU1vZGUnLCAnRGVmYWNlJyA9PiAnRGVmYWNlJywgJ0luZmVjdCcgPT4gJ0luZmVjdCcsICdSZWFkYWJsZScgPT4gJ1JlYWRhYmxlJywnQ2dpU2hlbGwnPT4nQ2dpU2hlbGwnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdCcnV0ZWZvcmNlJz0+J0JydXRlZm9yY2UnLCdCYWNrLUNvbm5lY3QnPT4nTmV0d29yaycsICdEb21haW4tU2Nhbm5lcicgPT4gJ0RvbWFpbicsICdjUENyYWNrZXInID0+ICdDcGFuZWwnLCAnWm9uZS1oJyA9PiAnWkhwb3N0ZXInKTsKICAgICAgICAgICAgaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpCiAgICAgICAgICAgICAgICAgICAgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7CiAgICAgICAgICAgICRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1vdmUnOwogICAgICAgICAgICAkbWVudSA9ICcnOwogICAgICAgICAgICBmb3JlYWNoKCRtIGFzICRrID0+ICR2KQogICAgICAgICAgICAgICAgICAgICRtZW51IC49ICc8dGggd2lkdGg9IicuKGludCkoMTAwL2NvdW50KCRtKSkuJyUiPls8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnJy4kdi4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT5dPC90aD4nOwogICAgIAogICAgICAgICAgICAkZHJpdmVzID0gIiI7CglpZigkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgewoJCWZvcmVhY2gocmFuZ2UoJ2MnLCd6JykgYXMgJGRyaXZlKQoJCWlmKGlzX2RpcigkZHJpdmUuJzpcXCcpKQoJCQkkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7Cgl9CgllY2hvICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlBocDo8YnI+SGRkOjxicj5Dd2Q6JyAuICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nPGJyPkRyaXZlczonOicnKSAuICc8L3NwYW4+PC90ZD4nCiAgICAgICAuICc8dGQ+PG5vYnI+JyAuIHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgLiAnIDxhIGhyZWY9IicgLiAkZXhwbGluayAuICciIHRhcmdldD1fYmxhbms+W2V4cGxvaXQtZGIuY29tXTwvYT48L25vYnI+PGJyPicgLiAkdWlkIC4gJyAoICcgLiAkdXNlciAuICcgKSA8c3Bhbj5Hcm91cDo8L3NwYW4+ICcgLiAkZ2lkIC4gJyAoICcgLiAkZ3JvdXAgLiAnICk8YnI+JyAuIEBwaHB2ZXJzaW9uKCkgLiAnIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4+ICcgLiAoJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9Z3JlZW4+PGI+T0ZGPC9iPjwvZm9udD4nKQogICAgICAgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxcJ1wnLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+IDxzcGFuPkRhdGV0aW1lOjwvc3Bhbj4gJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAnPGJyPicgLiB3c29WaWV3U2l6ZSgkdG90YWxTcGFjZSkgLiAnIDxzcGFuPkZyZWU6PC9zcGFuPiAnIC4gd3NvVmlld1NpemUoJGZyZWVTcGFjZSkgLiAnICgnLiAoaW50KSAoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApIC4gJyUpPGJyPicgLiAkY3dkX2xpbmtzIC4gJyAnLiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycgLiAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICdcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nIC4gJGRyaXZlcyAuICc8L3RkPicKICAgICAgIC4gJzx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9ImcobnVsbCxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudmFsdWUpIj48b3B0Z3JvdXAgbGFiZWw9IlBhZ2UgY2hhcnNldCI+JyAuICRvcHRfY2hhcnNldHMgLiAnPC9vcHRncm91cD48L3NlbGVjdD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+JyAuIEAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXSAuICc8YnI+PHNwYW4+Q2xpZW50IElQOjwvc3Bhbj48YnI+JyAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nCiAgICAgICAuICc8dGFibGUgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkIGdyZWVuOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicgLiAkbWVudSAuICc8L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7Cn0KCmZ1bmN0aW9uIHdzb0Zvb3RlcigpIHsKCSRpc193cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/IiA8Zm9udCBjb2xvcj0nZ3JlZW4nPihXcml0ZWFibGUpPC9mb250PiI6IiA8Zm9udCBjb2xvcj1yZWQ+KE5vdCB3cml0YWJsZSk8L2ZvbnQ+IjsKICAgIGVjaG8gIgo8L2Rpdj4KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCBsaW1lO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGxpbWU7Jz4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KCTwvdHI+PHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBmaWxlOjwvc3Bhbj4kaXNfd3JpdGFibGU8YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4KCTwvdHI+PHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNQW4nPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiAkR0xPQkFMU1snY3dkJ10gLiInPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiAiJz4KCQk8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxiciAgPjwvdGQ+PC90cj4KCQk8dGQ+PGNlbnRlcj5odHRwOi8vVXJkdUhhY2tzLmJsb2dzcG90LkNvbS88L3RkPgoJCTx0ZD48Y2VudGVyPkNvbnRhY3QgOiBodHRwczovL3d3dy5mYWNlYm9vay5jb20vTWFzdGVyWm9tYmllT0ZGaUNpYUw8L3RkPgoJCTx0ZD48Y2VudGVyPkNvbnRhY3QgOiBodHRwczovL3d3dy5mYWNlYm9vay5jb20vVXJkdUhhY2tzPC90ZD4KCQk8dGQ+PGNlbnRlcj5Db250YWN0IDogaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL1Bha2Fub255bW91czwvdGQ+CgkJCgkgIDwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPiI7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7CiAgICBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkge3JldHVybiBmYWxzZTt9IH0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsKICAgIGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQoKZnVuY3Rpb24gd3NvRXgoJGluKSB7Cgkkb3V0ID0gJyc7CglpZiAoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKCQlAZXhlYygkaW4sJG91dCk7CgkJJG91dCA9IEBqb2luKCJcbiIsJG91dCk7Cgl9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CgkJb2Jfc3RhcnQoKTsKCQlAcGFzc3RocnUoJGluKTsKCQkkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7Cgl9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewoJCW9iX3N0YXJ0KCk7CgkJQHN5c3RlbSgkaW4pOwoJCSRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgewoJCSRvdXQgPSBzaGVsbF9leGVjKCRpbik7Cgl9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCJyIikpKSB7CgkJJG91dCA9ICIiOwoJCXdoaWxlKCFAZmVvZigkZikpCgkJCSRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7CgkJcGNsb3NlKCRmKTsKCX0KCXJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiB3c29WaWV3U2l6ZSgkcykgewogICAgaWYgKGlzX2ludCgkcykpCiAgICAgICAgJHMgPSBzcHJpbnRmKCIldSIsICRzKTsKICAgIAoJaWYoJHMgPj0gMTA3Mzc0MTgyNCkKCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CgllbHNlaWYoJHMgPj0gMTA0ODU3NikKCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOwoJZWxzZWlmKCRzID49IDEwMjQpCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0ICkgLiAnIEtCJzsKCWVsc2UKCQlyZXR1cm4gJHMgLiAnIEInOwp9CgpmdW5jdGlvbiB3c29QZXJtcygkcCkgewoJaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOwoJZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsKCWVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7CgllbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2InOwoJZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsKCWVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7CgllbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOwoJZWxzZSAkaSA9ICd1JzsKCSRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsKCSRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsKCSRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7CgkkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CgkkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7CgkkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOwoJJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKCXJldHVybiAkaTsKfQoKZnVuY3Rpb24gd3NvUGVybXNDb2xvcigkZikgewoJaWYgKCFAaXNfcmVhZGFibGUoJGYpKQoJCXJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD4nIC4gd3NvUGVybXMoQGZpbGVwZXJtcygkZikpIC4gJzwvZm9udD4nOwoJZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkKCQlyZXR1cm4gJzxmb250IGNvbG9yPXdoaXRlPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7CgllbHNlCgkJcmV0dXJuICc8Zm9udCBjb2xvcj0jMjVmZjAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7Cn0KCmZ1bmN0aW9uIHdzb1NjYW5kaXIoJGRpcikgewogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsKICAgICAgICByZXR1cm4gc2NhbmRpcigkZGlyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGRoICA9IG9wZW5kaXIoJGRpcik7CiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkKICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7CiAgICAgICAgcmV0dXJuICRmaWxlczsKICAgIH0KfQoKZnVuY3Rpb24gd3NvV2hpY2goJHApIHsKCSRwYXRoID0gd3NvRXgoJ3doaWNoICcgLiAkcCk7CglpZighZW1wdHkoJHBhdGgpKQoJCXJldHVybiAkcGF0aDsKCXJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsKCXdzb0hlYWRlcigpOwoJZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglmdW5jdGlvbiB3c29TZWNQYXJhbSgkbiwgJHYpIHsKCQkkdiA9IHRyaW0oJHYpOwoJCWlmKCR2KSB7CgkJCWVjaG8gJzxzcGFuPicgLiAkbiAuICc6IDwvc3Bhbj4nOwoJCQlpZihzdHJwb3MoJHYsICJcbiIpID09PSBmYWxzZSkKCQkJCWVjaG8gJHYgLiAnPGJyPic7CgkJCWVsc2UKCQkJCWVjaG8gJzxwcmUgY2xhc3M9bWwxPicgLiAkdiAuICc8L3ByZT4nOwoJCX0KCX0KCgl3c29TZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSkKICAgICAgICB3c29TZWNQYXJhbSgnTG9hZGVkIEFwYWNoZSBtb2R1bGVzJywgaW1wbG9kZSgnLCAnLCBhcGFjaGVfZ2V0X21vZHVsZXMoKSkpOwoJd3NvU2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOwoJd3NvU2VjUGFyYW0oJ09wZW4gYmFzZSBkaXInLCBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOwoJd3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7Cgl3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsKCXdzb1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPydlbmFibGVkJzonbm8nKTsKCSR0ZW1wPWFycmF5KCk7CglpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQoJCSR0ZW1wW10gPSAiTXlTcWwgKCIubXlzcWxfZ2V0X2NsaWVudF9pbmZvKCkuIikiOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpCgkJJHRlbXBbXSA9ICJNU1NRTCI7CglpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkKCQkkdGVtcFtdID0gIlBvc3RncmVTUUwiOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKQoJCSR0ZW1wW10gPSAiT3JhY2xlIjsKCXdzb1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwoJZWNobyAnPGJyPic7CgoJaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcpIHsKICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25vJyk7CiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOwogICAgICAgICAgICB3c29TZWNQYXJhbSgnT1MgdmVyc2lvbicsIEBmaWxlX2dldF9jb250ZW50cygnL3Byb2MvdmVyc2lvbicpKTsKICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwogICAgICAgICAgICBpZighJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7CiAgICAgICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICAgICAgICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZzY2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRhYmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywnb3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywnc3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOwogICAgICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgICAgICBlY2hvICc8YnI+JzsKICAgICAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkKICAgICAgICAgICAgICAgICAgICBpZih3c29XaGljaCgkaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAkaXRlbTsKICAgICAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7CiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkKICAgICAgICAgICAgICAgICAgICBpZih3c29XaGljaCgkaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAkaXRlbTsKICAgICAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pCiAgICAgICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKQogICAgICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07CiAgICAgICAgICAgICAgICB3c29TZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgICAgIGVjaG8gJzxici8+JzsKICAgICAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdIREQgc3BhY2UnLCB3c29FeCgnZGYgLWgnKSk7CiAgICAgICAgICAgICAgICB3c29TZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7CiAgICAgICAgICAgICAgICBlY2hvICc8YnIvPjxzcGFuPnBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgICAgIGlmIChpc3NldCAoJF9QT1NUWydwMiddLCAkX1BPU1RbJ3AzJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydwMiddKSAmJiBpc19udW1lcmljKCRfUE9TVFsncDMnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGVtcCA9ICIiOwogICAgICAgICAgICAgICAgICAgIGZvcig7JF9QT1NUWydwMiddIDw9ICRfUE9TVFsncDMnXTskX1BPU1RbJ3AyJ10rKykgewogICAgICAgICAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdWlkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXAgLj0gam9pbignOicsJHVpZCkuIlxuIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGJyLz4nOwogICAgICAgICAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdVc2VycycsICR0ZW1wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJfSBlbHNlIHsKCQl3c29TZWNQYXJhbSgnT1MgVmVyc2lvbicsd3NvRXgoJ3ZlcicpKTsKCQl3c29TZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsd3NvRXgoJ25ldCBhY2NvdW50cycpKTsKCQl3c29TZWNQYXJhbSgnVXNlciBBY2NvdW50cycsd3NvRXgoJ25ldCB1c2VyJykpOwoJfQoJZWNobyAnPC9kaXY+JzsKCXdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25waHB0b29scygpIHsKICAgIHdzb0hlYWRlcigpOwogICAgPz48Y2VudGVyPjw/cGhwCiAgICAvL21haWxlcgogICAgZWNobyAnPGI+TWFpbGVyPC9iPjxicj4KICAgIDxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9UE9TVD4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+CiAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG8gdmFsdWU9dG8+PGJyPgogICAgPGlucHV0IHR5cGU9dGV4dCBuYW1lPWZyb20gdmFsdWU9ZnJvbT48YnI+CiAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3ViamVjdCB2YWx1ZT1zdWJqZWN0Pjxicj4KICAgIDxpbnB1dCB0eXBlPXRleHQgbmFtZT1ib2R5IHZhbHVlPWJvZHk+PGJyPgogICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVN1Ym1pdD48L2Zvcm0+JzsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3RvJ10pICYmIGlzc2V0KCRfUE9TVFsnZnJvbSddKSAmJiBpc3NldCgkX1BPU1RbJ3N1YmplY3QnXSkgJiYgaXNzZXQoJF9QT1NUWydib2R5J10pKSB7CiAgICAgICAgICAgICRoZWFkZXJzID0gJ0Zyb206ICcuJF9QT1NUWydmcm9tJ107CiAgICAgICAgICAgIG1haWwgKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmplY3QnXSwkX1BPU1RbJ2JvZHknXSwkaGVhZGVycyk7CiAgICAgICAgICAgIGVjaG8gJ0VtYWlsIHNlbnQuJzsKICAgIH0KICAgICAKICAgIC8vcG9ydCBzY2FubmVyCiAgICBlY2hvICc8YnI+PGI+UG9ydCBTY2FubmVyPC9iPjxicj4nOwogICAgJHN0YXJ0ID0gc3RyaXBfdGFncygkX1BPU1RbJ3N0YXJ0J10pOwogICAgJGVuZCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydlbmQnXSk7CiAgICAkaG9zdCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydob3N0J10pOwogICAgIAogICAgaWYoaXNzZXQoJF9QT1NUWydob3N0J10pICYmIGlzX251bWVyaWMoJF9QT1NUWydlbmQnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ3N0YXJ0J10pKXsKICAgIGZvcigkaSA9ICRzdGFydDsgJGk8PSRlbmQ7ICRpKyspewogICAgICAgICAgICAkZnAgPSBAZnNvY2tvcGVuKCRob3N0LCAkaSwgJGVycm5vLCAkZXJyc3RyLCAzKTsKICAgICAgICAgICAgaWYoJGZwKXsKICAgICAgICAgICAgICAgICAgICBlY2hvICdQb3J0ICcuJGkuJyBpcyA8Zm9udCBjb2xvcj1ncmVlbj5vcGVuPC9mb250Pjxicj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgIH0KICAgIH1lbHNlewogICAgPz4KICAgIDxmb3JtIGFjdGlvbj0iPyIgbWV0aG9kPSJQT1NUIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+CiAgICBIb3N0OjxiciAvPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz48YnIgLz4KICAgIFBvcnQgc3RhcnQ6PGJyIC8+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RhcnQiIHZhbHVlPSIwIi8+PGJyIC8+CiAgICBQb3J0IGVuZDo8YnIgLz4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmQiIHZhbHVlPSI1MDAwIi8+PGJyIC8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2NhbiBQb3J0cyIgLz4KICAgIDwvZm9ybT4KICAgIDw/cGhwCiAgICB9CiAgICAgCiAgICAvL1VEUAogICAgaWYoaXNzZXQoJF9QT1NUWydob3N0J10pJiZpc19udW1lcmljKCRfUE9TVFsndGltZSddKSl7CiAgICAgICAgICAgICRwYWtpdHMgPSAwOwogICAgICAgICAgICBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsKICAgICAgICAgICAgc2V0X3RpbWVfbGltaXQoMCk7CiAgICAgICAgICAgCiAgICAgICAgICAgICRleGVjX3RpbWUgPSAkX1BPU1RbJ3RpbWUnXTsKICAgICAgICAgICAKICAgICAgICAgICAgJHRpbWUgPSB0aW1lKCk7CiAgICAgICAgICAgIC8vcHJpbnQgIlN0YXJ0ZWQ6ICIudGltZSgnaDppOnMnKS4iPGJyPiI7CiAgICAgICAgICAgICRtYXhfdGltZSA9ICR0aW1lKyRleGVjX3RpbWU7CiAgICAgCiAgICAgICAgICAgICRob3N0ID0gJF9QT1NUWydob3N0J107CiAgICAgICAgICAgCiAgICAgICAgICAgIGZvcigkaT0wOyRpPDY1MDAwOyRpKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAnWCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUoMSl7CiAgICAgICAgICAgICRwYWtpdHMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRpbWUoKSA+ICRtYXhfdGltZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmFuZCA9IHJhbmQoMSw2NTAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnAgPSBmc29ja29wZW4oJ3VkcDovLycuJGhvc3QsICRyYW5kLCAkZXJybm8sICRlcnJzdHIsIDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI8YnI+PGI+VURQIEZsb29kPC9iPjxicj5Db21wbGV0ZWQgd2l0aCAkcGFraXRzICgiIC4gcm91bmQoKCRwYWtpdHMqNjUpLzEwMjQsIDIpIC4gIiBNQikgcGFja2V0cyBhdmVyYWdpbmcgIi4gcm91bmQoJHBha2l0cy8kZXhlY190aW1lLCAyKSAuICIgcGFja2V0cyBwZXIgc2Vjb25kIFxuIjsKICAgICAgICAgICAgZWNobyAnPGJyPjxicj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IicuJHN1cmwuJyIgbWV0aG9kPVBPU1Q+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InBocHRvb2xzIj4KICAgICAgICAgICAgICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT1sb2NhbGhvc3Q+CiAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIChzZWNvbmRzKTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXRpbWUgdmFsdWU9OTk5OT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9R28+PC9mb3JtPic7CiAgICB9ZWxzZXsgZWNobyAnPGJyPjxiPlVEUCBGbG9vZDwvYj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249PyBtZXRob2Q9UE9TVD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0OiA8YnI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3QgdmFsdWU9bG9jYWxob3N0Pjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCAoc2Vjb25kcyk6IDxicj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dGltZSB2YWx1ZT05OTk5Pjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1Hbz48L2Zvcm0+JzsKICAgIH0KICAgID8+PC9jZW50ZXI+PD9waHAKICAgIHdzb0Zvb3RlcigpO30KCWZ1bmN0aW9uIGFjdGlvblN5bWxpbmsoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvSGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPlN5bWxpbms8L2gxPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1cmwgPSAnaHR0cDovLycgLiAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSAuICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHBsZCA9IGV4cGxvZGUoJy8nLCAkZnVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ1cmwgPSBzdHJfcmVwbGFjZShlbmQoJGV4cGxkKSwgJycsICRmdXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij48Y2VudGVyPgogICAgICAgICAgICAgICAgPGgzPlsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLFwnd2Vic2l0ZVwnLG51bGwpIj5Eb21haW5zPC9hPiBdIC0gCiAgICAgICAgICAgICAgICAgICAgWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCd3aG9sZVwnLG51bGwpIj5XaG9sZSBTZXJ2ZXIgU3ltbGluazwvYT4gXSAtIAogICAgICAgICAgICAgICAgICAgIFsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLFwnY29uZmlnXCcsbnVsbCkiPkNvbmZpZyBGaWxlIHN5bWxpbms8L2E+IF08L2gzPjwvY2VudGVyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddID09ICd3ZWJzaXRlJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Y2VudGVyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkMG1haW5zID0gQGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRkMG1haW5zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPkNhbnQgYWNjZXNzIHRoaXMgZmlsZSBvbiBzZXJ2ZXIgLT4gWyAvZXRjL25hbWVkLmNvbmYgXTwvcHJlPjwvY2VudGVyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGNsYXNzPSdtYWluJyBib3JkZXI9MCA+PHRyIGJnY29sb3I9XCIjNWU1ZTVlXCI+PHRkPkNvdW50PC90ZD48dGQ+ZG9tYWluczwvdGQ+PHRkPnVzZXJzPC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGQwbWFpbnMgYXMgJGQwbWFpbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koInpvbmUiLCAkZDBtYWluKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIiAuICRkb21haW5zWzFdWzBdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHI+PHRkPiIgLiAkY291bnQgLiAiPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vIiAuICRkb21haW5zWzFdWzBdIC4gIi8+IiAuICRkb21haW5zWzFdWzBdIC4gIjwvYT48L3RkPjx0ZD4iIC4gJHVzZXJbJ25hbWUnXSAuICI8L3RkPjwvdHI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2NlbnRlcj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ10gPT0gJ3dob2xlJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Y2VudGVyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBta2Rpcignc3ltJywgMDc3Nyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZHQgPSAiT3B0aW9ucyBhbGwgCiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCAKIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIAogQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgCiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIAogQWRkSGFuZGxlciB0eHQgLmh0bWwgCiBSZXF1aXJlIE5vbmUgCiBTYXRpc2Z5IEFueSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZnAgPSBAZm9wZW4oJ3N5bS8uaHRhY2Nlc3MnLCAndycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGhmcCwgJGhkdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN5bWxpbmsoJy8nLCAnc3ltL3Jvb3QnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZDBtYWlucyA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZDBtYWlucykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4jIENhbnQgYWNjZXNzIHRoaXMgZmlsZSBvbiBzZXJ2ZXIgLT4gWyAvZXRjL25hbWVkLmNvbmYgXTwvcHJlPjwvY2VudGVyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJScgY2xhc3M9J21haW4nPjx0ciBiZ2NvbG9yPVwiIzVlNWU1ZVwiPjx0ZD4gQ291bnQgPC90ZD48dGQ+IERvbWFpbnMgPC90ZD48dGQ+IFVzZXIgPC90ZD48dGQ+IFN5bWxpbmsgPC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGQwbWFpbnMgYXMgJGQwbWFpbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koJ3pvbmUnLCAkZDBtYWluKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuKHRyaW0oJGRvbWFpblsxXVswXSkpID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCcvZXRjL3ZhbGlhc2VzLycgLiAkZG9tYWluWzFdWzBdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGR0ID0gJHVzZXJbJ25hbWUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzeW1saW5rKCcvJywgJ3N5bS9yb290Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGR0ID0gJGRvbWFpblsxXVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koIlwuaXIiLCAkZG9tYWluWzFdWzBdKSBvciBAZXJlZ2koIlwuaWwiLCAkZG9tYWluWzFdWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZHQgPSAiPGRpdiBzdHlsZT0nIGNvbG9yOiAjRkYwMDAwIDsgdGV4dC1zaGFkb3c6IDBweCAwcHggMXB4IHJlZDsgJz4iIC4gJGRvbWFpblsxXVswXSAuICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZD4iIC4gJGNvdW50KysgLiAiPC90ZD48dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9aHR0cDovLyIgLiAkZG9tYWluWzFdWzBdIC4gJy8+JyAuICRkZHQgLiAnIDwvYT48L3RkPjx0ZD4nIC4gJHVzZXJbJ25hbWUnXSAuICI8L3RkPjx0ZD48YSBocmVmPSdzeW0vcm9vdC9ob21lLyIgLiAkdXNlclsnbmFtZSddIC4gIi9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPnN5bWxpbmsgPC9hPjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXSA9PSAnY29uZmlnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Y2VudGVyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBta2Rpcignc3ltJywgMDc3Nyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZHQgPSAiT3B0aW9ucyBhbGwgCiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCAKIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIAogQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgCiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIAogQWRkSGFuZGxlciB0eHQgLmh0bWwgCiBSZXF1aXJlIE5vbmUgCiBTYXRpc2Z5IEFueSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZnAgPSBAZm9wZW4oJ3N5bS8uaHRhY2Nlc3MnLCAndycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZndyaXRlKCRoZnAsICRoZHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzeW1saW5rKCcvJywgJ3N5bS9yb290Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGQwbWFpbnMgPSBAZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGQwbWFpbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJyA+PHRyIGJnY29sb3I9XCIjNWU1ZTVlXCI+PHRkPiBDb3VudCA8L3RkPjx0ZD4gRG9tYWlucyA8L3RkPjx0ZD4gU2NyaXB0IDwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkMG1haW5zIGFzICRkMG1haW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQGVyZWdpKCd6b25lJywgJGQwbWFpbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZDBtYWluLCAkZG9tYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCRkb21haW5bMV1bMF0pKSA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nIC4gJGRvbWFpblsxXVswXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMxID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDEgPSBnZXRfaGVhZGVycygkYzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDEgPSAkY2gwMVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjMiA9ICRidXJsIC4gJy9zeW0vcm9vdC9ob21lLycgLiAkdXNlclsnbmFtZSddIC4gJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDIgPSBnZXRfaGVhZGVycygkYzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDIgPSAkY2gwMlswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjMyA9ICRidXJsIC4gJy9zeW0vcm9vdC9ob21lLycgLiAkdXNlclsnbmFtZSddIC4gJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2gwMyA9IGdldF9oZWFkZXJzKCRjMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YwMyA9ICRjaDAzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGM0ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2gwNCA9IGdldF9oZWFkZXJzKCRjNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YwNCA9ICRjaDA0WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGM1ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDUgPSBnZXRfaGVhZGVycygkYzUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDUgPSAkY2gwNVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjNiA9ICRidXJsIC4gJy9zeW0vcm9vdC9ob21lLycgLiAkdXNlclsnbmFtZSddIC4gJy9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaDA2ID0gZ2V0X2hlYWRlcnMoJGM2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZjA2ID0gJGNoMDZbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYzcgPSAkYnVybCAuICcvc3ltL3Jvb3QvaG9tZS8nIC4gJHVzZXJbJ25hbWUnXSAuICcvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2gwNyA9IGdldF9oZWFkZXJzKCRjNyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YwNyA9ICRjaDA3WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGM4ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAncHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2gwOCA9IGdldF9oZWFkZXJzKCRjOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YwOCA9ICRjaDA4WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGM5ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDkgPSBnZXRfaGVhZGVycygkYzkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDkgPSAkY2gwOVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjMTAgPSAkYnVybCAuICcvc3ltL3Jvb3QvaG9tZS8nIC4gJHVzZXJbJ25hbWUnXSAuICcvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaDEwID0gZ2V0X2hlYWRlcnMoJGMxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YxMCA9ICRjaDEwWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMxMSA9ICRidXJsIC4gJy9zeW0vcm9vdC9ob21lLycgLiAkdXNlclsnbmFtZSddIC4gJy9wdWJsaWNfaHRtbC9zdWJtaXR0aWNrZXQucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaDExID0gZ2V0X2hlYWRlcnMoJGMxMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YxMSA9ICRjaDExWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMxMiA9ICRidXJsIC4gJy9zeW0vcm9vdC9ob21lLycgLiAkdXNlclsnbmFtZSddIC4gJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTIgPSBnZXRfaGVhZGVycygkYzEyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZjEyID0gJGNoMTJbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYzEzID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTMgPSBnZXRfaGVhZGVycygkYzEzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZjEzID0gJGNoMTNbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYzE0ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL2luY2x1ZGUvYXBwX2NvbmZpZy5waHAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTQgPSBnZXRfaGVhZGVycygkYzE0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZjE0ID0gJGNoMTRbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYzE1ID0gJGJ1cmwgLiAnL3N5bS9yb290L2hvbWUvJyAuICR1c2VyWyduYW1lJ10gLiAnL3B1YmxpY19odG1sL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaDE1ID0gZ2V0X2hlYWRlcnMoJGMxNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2YxNSA9ICRjaDE1WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9ICcmbmJzcDsnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkY2YwMSwgJzIwMCcpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIjxhIGhyZWY9JyIgLiAkYzEgLiAiJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjAyLCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiPGEgaHJlZj0nIiAuICRjMiAuICInIHRhcmdldD0nX2JsYW5rJz5Xb3JkcHJlc3M8L2E+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJwb3MoJGNmMDMsICcyMDAnKSA9PSB0cnVlICYmIHN0cnBvcygkY2YxMSwgJzIwMCcpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIiA8YSBocmVmPSciIC4gJGMxMSAuICInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkY2YwOSwgJzIwMCcpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIiA8YSBocmVmPSciIC4gJGM5IC4gIicgdGFyZ2V0PSdfYmxhbmsnPldITUNTPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjEwLCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzEwIC4gIicgdGFyZ2V0PSdfYmxhbmsnPldITUNTPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjAzLCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzMgLiAiJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjA0LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzQgLiAiJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjA1LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzUgLiAiJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjA2LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzYgLiAiJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjA3LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzcgLiAiJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjA4LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzcgLiAiJyB0YXJnZXQ9J19ibGFuayc+Q2xpZW50IEFyZWE8L2E+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJwb3MoJGNmMTIsICcyMDAnKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9ICIgPGEgaHJlZj0nIiAuICRjNyAuICInIHRhcmdldD0nX2JsYW5rJz5DbGllbnQgQXJlYTwvYT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkY2YxMywgJzIwMCcpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gIiA8YSBocmVmPSciIC4gJGM3IC4gIicgdGFyZ2V0PSdfYmxhbmsnPm9zQ29tbWVyY2UvWmVuIENhcnQ8L2E+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJwb3MoJGNmMTQsICcyMDAnKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9ICIgPGEgaHJlZj0nIiAuICRjNyAuICInIHRhcmdldD0nX2JsYW5rJz5NYWdlbnRvPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCRjZjE1LCAnMjAwJykgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdXQgPSAiIDxhIGhyZWY9JyIgLiAkYzcgLiAiJyB0YXJnZXQ9J19ibGFuayc+RHJ1cGFsPC9hPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD4nIC4gJGNvdW50KysgLiAnPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LicgLiAkZG9tYWluWzFdWzBdIC4gJy8+JyAuICRkb21haW5bMV1bMF0gLiAnPC9hPjwvdGQ+PHRkPicgLiAkdXNlclsnbmFtZSddIC4gJzwvdGQ+PHRkPicgLiAkb3V0IC4gJzwvdGQ+PC90cj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2NlbnRlcj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0Zvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpmdW5jdGlvbiBhY3Rpb25EZWZhY2UoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvSGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGgxPlNpbmdsZSBVc2VyIE1hc3MgRGVmYWNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IjsKPz4KPGZvcm0gRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSI8PyRfU0VSVkVSWydQSFBfU0VMRiddPz4iIG1ldGhvZD1QT1NUIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnBhdGgudmFsdWUsdGhpcy5maWxlLnZhbHVlLHRoaXMuQ29udGVudHMudmFsdWUpO3JldHVybiBmYWxzZTsiPgo8cCBhbGlnbj0iTGVmdCI+Rm9sZGVyOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGF0aCBzaXplPTYwIHZhbHVlPSI8Pz1nZXRjd2QoKTsgPz4iPgo8YnI+ZmlsZSBuYW1lIDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgc2l6ZT0yMCB2YWx1ZT0iTXouaHRtbCI+Cjxicj5UZXh0IENvbnRlbnQgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Q29udGVudHMgc2l6ZT0yMCB2YWx1ZT0iSEFDS0VEIEJZIE1hc3RlclpvbWJpZSwgPGJyPjxicj4tIEhBQ0tFRCBCWSBFQEdMMyBTVFIhSzNSIj4gCjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IlVwZGF0ZSI+PC9wPjwvZm9ybT4KCjw/cGhwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfUE9TVFsnYSddID09ICdEZWZhY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYWlucGF0aCA9ICRfUE9TVFtwMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gJF9QT1NUW3AyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR4dENvbnRlbnRzID0gJF9QT1NUW3AzXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+ClsrXSBTaW5nbGUgdXNlciBNYXNzIGRlZmFjZXI8YnI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPjxicj4gIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9IG9wZW5kaXIoJG1haW5wYXRoKTsgLy9maXhtZSAtIGNhbm5vdCBkZWZhY2Ugd2hlbiBjaGFuZ2UgdG8gd3JpdGVhYmxlIHBhdGghIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHJvdyA9IHJlYWRkaXIoJGRpcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGFydCA9IEBmb3BlbigiJHJvdy8kZmlsZSIsICJ3KyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSAkdHh0Q29udGVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmluaXNoID0gQGZ3cml0ZSgkc3RhcnQsICRjb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmluaXNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHJvdy8kZmlsZSA+IERvbmU8YnI+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+PGJyPlsrXSBTY3JpcHQgYnkgRUBHTDMgU1RSIUszUiBbK10iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0Zvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQkJCQkJCQkJCQkJCQkJZnVuY3Rpb24gYWN0aW9uWkhwb3N0ZXIoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvSGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPlpvbmUtSCBQb3N0ZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PWRhMihudWxsLG51bGwsdGhpcy5wMS52YWx1ZSx0aGlzLnAyLnZhbHVlLHRoaXMucDMudmFsdWUsdGhpcy5wNC52YWx1ZSk7cmV0dXJuIHRydWU7Ij4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InAxIiBzaXplPSI0MCIgdmFsdWU9IkF0dGFja2VyIiAvPjwvYnI+CjxzZWxlY3QgbmFtZT0icDIiPgo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPmtub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPnVuZGlzY2xvc2VkIChuZXcpIHZ1bG5lcmFiaWxpdHk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPmNvbmZpZ3VyYXRpb24gLyBhZG1pbi4gbWlzdGFrZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0IiA+YnJ1dGUgZm9yY2UgYXR0YWNrPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiID5zb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNiIgPldlYiBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjciID5XZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iOCIgPk1haWwgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI5IiA+RlRQIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiID5TU0ggU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMSIgPlRlbG5ldCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEyIiA+UlBDIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiID5TaGFyZXMgbWlzY29uZmlndXJhdGlvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNCIgPk90aGVyIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTUiID5TUUwgSW5qZWN0aW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE2IiA+VVJMIFBvaXNvbmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNyIgPkZpbGUgSW5jbHVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE4IiA+T3RoZXIgV2ViIEFwcGxpY2F0aW9uIGJ1Zzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3MgYnJ1dGVmb3JjaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIiA+UmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3Mgc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIyIiA+QXR0YWNrIGFnYWluc3QgYWRtaW5pc3RyYXRvcihwYXNzd29yZCBzdGVhbGluZy9zbmlmZmluZyk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjMiID5BY2Nlc3MgY3JlZGVudGlhbHMgdGhyb3VnaCBNYW4gSW4gdGhlIE1pZGRsZSBhdHRhY2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjQiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNSIgPlJlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGJydXRlZm9yY2U8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjYiID5SZXJvdXRpbmcgYWZ0ZXIgYXR0YWNraW5nIHRoZSBGaXJld2FsbDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIFJvdXRlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyOCIgPkROUyBhdHRhY2sgdGhyb3VnaCBzb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjkiID5ETlMgYXR0YWNrIHRocm91Z2ggY2FjaGUgcG9pc29uaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMwIiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KPC9icj4KPHNlbGVjdCBuYW1lPSJwMyI+CjxvcHRpb24gPi0tLS0tLS0tU0VMRUNULS0tLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSIgPkhlaC4uLmp1c3QgZm9yIGZ1biE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPlBvbGl0aWNhbCByZWFzb25zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiID5BcyBhIGNoYWxsZW5nZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1IiA+SSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI2IiA+UGF0cmlvdGlzbTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI3IiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KPC9icj4KPHRleHRhcmVhIG5hbWU9InA0IiBjb2xzPSI0NCIgcm93cz0iOSI+TGlzdCBPZiBEb21haW5zPC90ZXh0YXJlYT4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgTm93ICEiIC8+CjwvZm9ybT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX1BPU1RbJ2EnXSA9PSAnWkhwb3N0ZXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWIgPSBAZ2V0X2xvYWRlZF9leHRlbnNpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoImN1cmwiLCAkc3ViKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCdbLV0gQ3VybCBJcyBOb3QgU3VwcG9ydGVkICEhICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYWNrZXI5ID0gJF9QT1NUWydwMSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kOSA9ICRfUE9TVFsncDInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lZGVuOSA9ICRfUE9TVFsncDMnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGU5ID0gJF9QT1NUWydwNCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGhhY2tlcjkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIlstXSBZb3UgTXVzdCBGaWxsIHRoZSBBdHRhY2tlciBuYW1lICEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRtZXRob2Q5ID09ICItLS0tLS0tLVNFTEVDVC0tLS0tLS0tIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJbLV0gWW91IE11c3QgU2VsZWN0IFRoZSBNZXRob2QgISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG5lZGVuOSA9PSAiLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiWy1dIFlvdSBNdXN0IFNlbGVjdCBUaGUgUmVhc29uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChlbXB0eSgkc2l0ZTkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIlstXSBZb3UgTXVzdCBJbnRlciB0aGUgU2l0ZXMgTGlzdCAhICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGVzID0gZXhwbG9kZSgiCiIsICRzaXRlOSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGNvdW50KCRzaXRlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJHNpdGVzWyRpXSwgMCwgNCkgIT0gImh0dHAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpdGVzWyRpXSA9ICJodHRwOi8vIiAuICRzaXRlc1skaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lSCgiaHR0cDovL3pvbmUtaC5vcmcvbm90aWZ5L3NpbmdsZSIsICRoYWNrZXI5LCAkbWV0aG9kOSwgJG5lZGVuOSwgJHNpdGVzWyRpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJTaXRlIDogIiAuICRzaXRlc1skaV0gLiAiIERlZmFjZWQgISA8L2JyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKyRpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBTZW5kaW5nIFNpdGVzIFRvIFpvbmUtSCBIYXMgQmVlbiBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5ICEhICI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c29Gb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KZnVuY3Rpb24gYWN0aW9uQ3BhbmVsKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0hlYWRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5jUGFuZWwgQ3JhY2tlcjwvaDE+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBhbGlnbj1jZW50ZXIgY2xhc3M9Im1haW4iIGJvcmRlcj0iMCI+PHRyIGJnY29sb3I9IiM1ZTVlNWUiPjx0ZD5Vc2VyczwvdGQ+PHRkPjwvdGQ+PHRkPlNlbGVjdGVkIFVzZXJzPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjwvdHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHI+PHRkPjx0ZXh0YXJlYSByb3dzPSIyMCIgbmFtZT0iUzEiIGNvbHM9IjMzIj48L3RleHRhcmVhPjwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iY3BhZDEiIHZhbHVlPSI+IiBjbGFzcz0iY3BiIi8+PGJyIC8+PGJyIC8+PGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iY3BhZGFsbCIgdmFsdWU9Ij4+IiBjbGFzcz0iY3BiIi8+PGJyIC8+PGJyIC8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtMSIgdmFsdWU9IjwiIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtYWxsIiB2YWx1ZT0iPDwiIGNsYXNzPSJjcGIiLz48L3RkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPjx0ZXh0YXJlYSByb3dzPSIyMCIgbmFtZT0idXNlcnMiIGNvbHM9IjMzIj48L3RleHRhcmVhPjwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PHRleHRhcmVhIHJvd3M9IjIwIiBuYW1lPSJwYXNzd29yZHMiIGNvbHM9IjMzIj48L3RleHRhcmVhPjwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjI1MnB4OyIgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJnKFwnQ3BhbmVsXCcsbnVsbCxcJ2dyYmV0Y3B3XCcpIiB2YWx1ZT0iR3JhYiB1c2VybmFtZXMgZnJvbSAvZXRjL3Bhc3N3ZCIvPjxiciAvPjxpbnB1dCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7d2lkdGg6MjUycHg7IiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImcoXCdDcGFuZWxcJyxudWxsLFwnZ3JiaG9tZVwnKSIgdmFsdWU9IkdyYWIgdXNlcm5hbWVzIGZyb20gL2hvbWUiLz48L3RkPjx0ZD48L3RkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkIGNvbHNwYW49IjIiPjxzcGFuPkNyYWNrIG9wdGlvbnM6Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjxpbnB1dCBuYW1lPSJjcmFja3R5cGUiIHZhbHVlPSJjcGFuZWwiIGNoZWNrZWQgdHlwZT0icmFkaW8iPjxiPkNwYW5lbCgyMDgyKTwvYj4mbmJzcDsmbmJzcDs8aW5wdXQgbmFtZT0iY3JhY2t0eXBlIiB2YWx1ZT0id2htIiB0eXBlPSJyYWRpbyI+PGI+V0hNKDIwODcpPC9iPiZuYnNwOyZuYnNwOzxpbnB1dCBuYW1lPSJjcmFja3R5cGUiIHZhbHVlPSJmdHAiIHR5cGU9InJhZGlvIj48Yj5GdHAoMjEpPC9iPjxiciAvPgogICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7Ij48c3Bhbj5UaW1lb3V0IGRlbGF5OiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29ubmVjdF90aW1lb3V0IiBzaXplPSI0IiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImJydXRlZm9yY2UiIHZhbHVlPSJ0cnVlIi8+Jm5ic3A7PHNwYW4+QnJ1dGVmb3JjZTwvc3Bhbj4mbmJzcDsKICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY2hhcnNldCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWxsIj5BbGwgTGV0dGVycyArIE51bWJlcnM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJudW1lcmljIj5OdW1iZXJzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibGV0dGVycyI+TGV0dGVyczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN5bWJvbHMiPlN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcmNhc2UiPkxvd2VyIExldHRlcnM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cHBlcmNhc2UiPkhpZ2hlciBMZXR0ZXJzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG93ZXJudW1lcmljIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVyczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InVwcGVybnVtZXJpYyI+VXBwZXIgTGV0dGVycyArIE51bWJlcnM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcnN5bWJvbHMiPkxvd2VyIExldHRlcnMgKyBTeW1ib2xzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJzeW1ib2xzIj5VcHBlciBMZXR0ZXJzICsgU3ltYm9sczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImxldHRlcnNzeW1ib2xzIj5BbGwgTGV0dGVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJudW1iZXJzc3ltYm9scyI+TnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcm51bWVyaWNzeW1ib2xzIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cHBlcm51bWVyaWNzeW1ib2xzIj5VcHBlciBMZXR0ZXJzICsgTnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzbnVtZXJpY3N5bWJvbHMiPkFsbCBMZXR0ZXJzICsgTnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7Ij48c3Bhbj5NaW4gQnJ1dGVmb3JjZSBMZW5ndGg6Jm5ic3A7Jm5ic3A7PC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtaW5fbGVuZ3RoIiBzaXplPSI1IiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNwYW4+TWF4IEJydXRlZm9yY2UgTGVuZ3RoOiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWF4X2xlbmd0aCIgc2l6ZT0iNSIgdmFsdWU9IiIvPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmFjayBOb3ciIG5hbWU9InN1Ym1pdCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyIvPjwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD48L3RyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvRm9vdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CQkJCQkJCQkJCQkJCQkJCQogZnVuY3Rpb24gYWN0aW9uRG9tYWluKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0hlYWRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5sb2NhbCBkb21haW4gdmlld2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9IEBpbXBsb2RlKEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIiMgY2FuJ3QgUmVhRCAtPiBbIC9ldGMvbmFtZWQuY29uZiBdIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCIjbmFtZWQvKC4qPykuZGIjIiwgJGZpbGUsICRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9tYWlucyA9IGFycmF5X3VuaXF1ZSgkclsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYoaXNzZXQoJF9HRVRbJ1Nob3dBbGwnXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pgo8dHI+PHRkIGNvbHNwYW49Mj5bK10gVGhlcmUgYXJlIDogWyA8Yj4iIC4gY291bnQoJGRvbWFpbnMpIC4gIjwvYj4gXSBEb21haW48L3RkPjwvdHI+Cjx0cj48dGQ+RG9tYWluPC90ZD48dGQ+VXNlcjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZG9tYWlucyBhcyAkZG9tYWluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIiAuICRkb21haW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+JGRvbWFpbjwvdGQ+PHRkPiIgLiAkdXNlclsnbmFtZSddIC4gIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c29Gb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0JCQkJCQkJCQkJCQkJCQkJCmZ1bmN0aW9uIGFjdGlvbkluZmVjdCgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c29IZWFkZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+SW5mZWN0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9QT1NUWydwMSddID09ICdpbmZlY3QnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaXN0RmlsZXMoJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXMgPSBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IEFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2RpcigkZGlyIC4gIi8iIC4gJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlubmVyX2ZpbGVzID0gTGlzdEZpbGVzKCRkaXIgLiAiLyIgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRpbm5lcl9maWxlcykpICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlcywgJGlubmVyX2ZpbGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZmlsZXMsICRkaXIgLiAiLyIgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKExpc3RGaWxlcygkdGFyZ2V0KSBhcyAka2V5ID0+ICRmaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbkZpbGUgPSBzdWJzdHIoJGZpbGUsIC00LCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbkZpbGUgPT0gIi5waHAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZmlsZSA8PiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJF9TRVJWRVJbJ1BIUF9TRUxGJ10pICYmIChpc193cml0ZWFibGUoJGZpbGUpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkZmlsZTxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQgc2l6ZT0xND4kaTwvZm9udD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0PjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1JbmZlY3QgbmFtZT1pbmZldD48L2Zvcm0+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnUmVhbGx5IHdhbnQgdG8gaW5mZWN0IHRoZSBzZXJ2ZXI/Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnaW5mZWN0XCcpIj5ZZXM8L2E+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c29Gb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KZnVuY3Rpb24gYWN0aW9uUmVhZGFibGUoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvSGVhZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGgxPlN1YmRvbWFpbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRzbSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpID09IDApID8gJHNtID0gJ29mZicgOiBkaWUoJzxiPkVycm9yOiBzYWZlX21vZGUgPSBvbjwvYj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfdGltZV9saW1pdCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQCRwYXNzd2QgPSBmb3BlbignL2V0Yy9wYXNzd2QnLCAncicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHBhc3N3ZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoJzxiPlstXSBFcnJvciA6IGNvdWRuYHQgcmVhZCAvZXRjL3Bhc3N3ZDwvYj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB1YiA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZiA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkcGFzc3dkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RyID0gZmdldHMoJHBhc3N3ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaSA+IDM1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9zID0gc3RycG9zKCRzdHIsICc6Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXNlcm5hbWUgPSBzdWJzdHIoJHN0ciwgMCwgJHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlyeiA9ICcvaG9tZS8nIC4gJHVzZXJuYW1lIC4gJy9wdWJsaWNfaHRtbC8nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkdXNlcm5hbWUgIT0gJycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VycywgJHVzZXJuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcHViLCAkZGlyeik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8YnI+PGJyPjx0ZXh0YXJlYSByb3dzPSIyMCUiIGNvbHM9IjEwMCUiIGNsYXNzPSJvdXRwdXQiID4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBGb3VuZGVkICIgLiBzaXplb2YoJHVzZXJzKSAuICIgZW50cnlzIGluIC9ldGMvcGFzc3dkCiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWytdIEZvdW5kZWQgIiAuIHNpemVvZigkcHViKSAuICIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXMKIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJbfl0gU2VhcmNoaW5nIGZvciBwYXNzd29yZHMgaW4gY29uZmlnIGZpbGVzLi4uCgoiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGF0aCA9ICIvaG9tZS8kdXNlci9wdWJsaWNfaHRtbC8iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkcGF0aCAKIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiCiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWytdIERvbmUuLi4KIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxicj48L2JvZHk+PC9odG1sPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c29Gb290ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0JCQkJCQkJCQkJCQkJCmZ1bmN0aW9uIGFjdGlvbkNnaVNoZWxsKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0hlYWRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5DZ2l0ZWxuZXQ8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCdjZ2l0ZWxuZXQxJywgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJ2NnaXRlbG5ldDEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka29rZG9zeWEgPSAiLmh0YWNjZXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9zeWFfYWRpID0gIiRrb2tkb3N5YSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvc3lhID0gZm9wZW4oJGRvc3lhX2FkaSwgJ3cnKSBvciBkaWUoIkRvc3lhIGEmIzIzMTsmIzMwNTtsYW1hZCYjMzA1OyEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aW4gPSAiT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQoKQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuY2luCgpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmNpbgpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmNpbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRkb3N5YSwgJG1ldGluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGRvc3lhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2dpc2hlbGxpem9jaW4gPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV0ZwYmcwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUTBLSXlBOFlpQnpkSGxzWlQwaVkyOXNiM0k2WW14aFkyczdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pabVptWmpZMklqNXcKY21sMk9DQmpaMmtnYzJobGJHdzhMMkkrSUNNZ2MyVnlkbVZ5RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb05DaU10CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdRMjl1Wm1sbmRYSmhkR2x2YmpvZ1dXOTFJRzVsWldRZ2RHOGdZMmhoYm1kbApJRzl1YkhrZ0pGQmhjM04zYjNKa0lHRnVaQ0FrVjJsdVRsUXVJRlJvWlNCdmRHaGxjZzBLSXlCMllXeDFaWE1nYzJodmRXeGtJSGR2CmNtc2dabWx1WlNCbWIzSWdiVzl6ZENCemVYTjBaVzF6TGcwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtKRkJoYzNOMwpiM0prSUQwZ0luQnlhWFk0SWpzSkNTTWdRMmhoYm1kbElIUm9hWE11SUZsdmRTQjNhV3hzSUc1bFpXUWdkRzhnWlc1MFpYSWdkR2hwCmN3MEtDUWtKQ1NNZ2RHOGdiRzluYVc0dURRb05DaVJYYVc1T1ZDQTlJREE3Q1FrSkl5QlpiM1VnYm1WbFpDQjBieUJqYUdGdVoyVWcKZEdobElIWmhiSFZsSUc5bUlIUm9hWE1nZEc4Z01TQnBaZzBLQ1FrSkNTTWdlVzkxSjNKbElISjFibTVwYm1jZ2RHaHBjeUJ6WTNKcApjSFFnYjI0Z1lTQlhhVzVrYjNkeklFNVVEUW9KQ1FrSkl5QnRZV05vYVc1bExpQkpaaUI1YjNVbmNtVWdjblZ1Ym1sdVp5QnBkQ0J2CmJpQlZibWw0TENCNWIzVU5DZ2tKQ1FraklHTmhiaUJzWldGMlpTQjBhR1VnZG1Gc2RXVWdZWE1nYVhRZ2FYTXVEUW9OQ2lST1ZFTnQKWkZObGNDQTlJQ0ltSWpzSkNTTWdWR2hwY3lCamFHRnlZV04wWlhJZ2FYTWdkWE5sWkNCMGJ5QnpaWEJsY21GMFpTQXlJR052YlcxaApibVJ6RFFvSkNRa0pJeUJwYmlCaElHTnZiVzFoYm1RZ2JHbHVaU0J2YmlCWGFXNWtiM2R6SUU1VUxnMEtEUW9rVlc1cGVFTnRaRk5sCmNDQTlJQ0k3SWpzSkNTTWdWR2hwY3lCamFHRnlZV04wWlhJZ2FYTWdkWE5sWkNCMGJ5QnpaWEJsY21GMFpTQXlJR052YlcxaGJtUnoKRFFvSkNRa0pJeUJwYmlCaElHTnZiVzFoYm1RZ2JHbHVaU0J2YmlCVmJtbDRMZzBLRFFva1EyOXRiV0Z1WkZScGJXVnZkWFJFZFhKaApkR2x2YmlBOUlERXdPd2tqSUZScGJXVWdhVzRnYzJWamIyNWtjeUJoWm5SbGNpQmpiMjF0WVc1a2N5QjNhV3hzSUdKbElHdHBiR3hsClpBMEtDUWtKQ1NNZ1JHOXVKM1FnYzJWMElIUm9hWE1nZEc4Z1lTQjJaWEo1SUd4aGNtZGxJSFpoYkhWbExpQlVhR2x6SUdsekRRb0oKQ1FrSkl5QjFjMlZtZFd3Z1ptOXlJR052YlcxaGJtUnpJSFJvWVhRZ2JXRjVJR2hoYm1jZ2IzSWdkR2hoZEEwS0NRa0pDU01nZEdGcgpaU0IyWlhKNUlHeHZibWNnZEc4Z1pYaGxZM1YwWlN3Z2JHbHJaU0FpWm1sdVpDQXZJaTROQ2drSkNRa2pJRlJvYVhNZ2FYTWdkbUZzCmFXUWdiMjVzZVNCdmJpQlZibWw0SUhObGNuWmxjbk11SUVsMElHbHpEUW9KQ1FrSkl5QnBaMjV2Y21Wa0lHOXVJRTVVSUZObGNuWmwKY25NdURRb05DaVJUYUc5M1JIbHVZVzFwWTA5MWRIQjFkQ0E5SURFN0NRa2pJRWxtSUhSb2FYTWdhWE1nTVN3Z2RHaGxiaUJrWVhSaApJR2x6SUhObGJuUWdkRzhnZEdobERRb0pDUWtKSXlCaWNtOTNjMlZ5SUdGeklITnZiMjRnWVhNZ2FYUWdhWE1nYjNWMGNIVjBMQ0J2CmRHaGxjbmRwYzJVTkNna0pDUWtqSUdsMElHbHpJR0oxWm1abGNtVmtJR0Z1WkNCelpXNWtJSGRvWlc0Z2RHaGxJR052YlcxaGJtUU4KQ2drSkNRa2pJR052YlhCc1pYUmxjeTRnVkdocGN5QnBjeUIxYzJWbWRXd2dabTl5SUdOdmJXMWhibVJ6SUd4cGEyVU5DZ2tKQ1FragpJSEJwYm1jc0lITnZJSFJvWVhRZ2VXOTFJR05oYmlCelpXVWdkR2hsSUc5MWRIQjFkQ0JoY3lCcGRBMEtDUWtKQ1NNZ2FYTWdZbVZwCmJtY2daMlZ1WlhKaGRHVmtMZzBLRFFvaklFUlBUaWRVSUVOSVFVNUhSU0JCVGxsVVNFbE9SeUJDUlV4UFZ5QlVTRWxUSUV4SlRrVWcKVlU1TVJWTlRJRmxQVlNCTFRrOVhJRmRJUVZRZ1dVOVZKMUpGSUVSUFNVNUhJQ0VoRFFvTkNpUkRiV1JUWlhBZ1BTQW9KRmRwYms1VQpJRDhnSkU1VVEyMWtVMlZ3SURvZ0pGVnVhWGhEYldSVFpYQXBPdzBLSkVOdFpGQjNaQ0E5SUNna1YybHVUbFFnUHlBaVkyUWlJRG9nCkluQjNaQ0lwT3cwS0pGQmhkR2hUWlhBZ1BTQW9KRmRwYms1VUlEOGdJbHhjSWlBNklDSXZJaWs3RFFva1VtVmthWEpsWTNSdmNpQTkKSUNna1YybHVUbFFnUHlBaUlESStKakVnTVQ0bU1pSWdPaUFpSURFK0pqRWdNajRtTVNJcE93MEtEUW9qTFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdERRb2pJRkpsWVdSeklIUm9aU0JwYm5CMWRDQnpaVzUwSUdKNUlIUm9aU0JpY205M2MyVnlJR0Z1WkNCd1lYSnoKWlhNZ2RHaGxJR2x1Y0hWMElIWmhjbWxoWW14bGN5NGdTWFFOQ2lNZ2NHRnljMlZ6SUVkRlZDd2dVRTlUVkNCaGJtUWdiWFZzZEdsdwpZWEowTDJadmNtMHRaR0YwWVNCMGFHRjBJR2x6SUhWelpXUWdabTl5SUhWd2JHOWhaR2x1WnlCbWFXeGxjeTROQ2lNZ1ZHaGxJR1pwCmJHVnVZVzFsSUdseklITjBiM0psWkNCcGJpQWthVzU3SjJZbmZTQmhibVFnZEdobElHUmhkR0VnYVhNZ2MzUnZjbVZrSUdsdUlDUnAKYm5zblptbHNaV1JoZEdFbmZTNE5DaU1nVDNSb1pYSWdkbUZ5YVdGaWJHVnpJR05oYmlCaVpTQmhZMk5sYzNObFpDQjFjMmx1WnlBawphVzU3SjNaaGNpZDlMQ0IzYUdWeVpTQjJZWElnYVhNZ2RHaGxJRzVoYldVZ2IyWU5DaU1nZEdobElIWmhjbWxoWW14bExpQk9iM1JsCk9pQk5iM04wSUc5bUlIUm9aU0JqYjJSbElHbHVJSFJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdkR0ZyWlc0Z1puSnZiU0J2ZEdobGNpQkQKUjBrTkNpTWdjMk55YVhCMGN5NE5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlNaV0ZrVUdGeWMyVWdEUXA3CkRRb0piRzlqWVd3Z0tDcHBiaWtnUFNCQVh5QnBaaUJBWHpzTkNnbHNiMk5oYkNBb0pHa3NJQ1JzYjJNc0lDUnJaWGtzSUNSMllXd3AKT3cwS0NRMEtDU1JOZFd4MGFYQmhjblJHYjNKdFJHRjBZU0E5SUNSRlRsWjdKME5QVGxSRlRsUmZWRmxRUlNkOUlEMStJQzl0ZFd4MAphWEJoY25SY0wyWnZjbTB0WkdGMFlUc2dZbTkxYm1SaGNuazlLQzRyS1NRdk93MEtEUW9KYVdZb0pFVk9WbnNuVWtWUlZVVlRWRjlOClJWUklUMFFuZlNCbGNTQWlSMFZVSWlrTkNnbDdEUW9KQ1NScGJpQTlJQ1JGVGxaN0oxRlZSVkpaWDFOVVVrbE9SeWQ5T3cwS0NYME4KQ2dsbGJITnBaaWdrUlU1V2V5ZFNSVkZWUlZOVVgwMUZWRWhQUkNkOUlHVnhJQ0pRVDFOVUlpa05DZ2w3RFFvSkNXSnBibTF2WkdVbwpVMVJFU1U0cElHbG1JQ1JOZFd4MGFYQmhjblJHYjNKdFJHRjBZU0FtSUNSWGFXNU9WRHNOQ2drSmNtVmhaQ2hUVkVSSlRpd2dKR2x1CkxDQWtSVTVXZXlkRFQwNVVSVTVVWDB4RlRrZFVTQ2Q5S1RzTkNnbDlEUW9OQ2draklHaGhibVJzWlNCbWFXeGxJSFZ3Ykc5aFpDQmsKWVhSaERRb0phV1lvSkVWT1Zuc25RMDlPVkVWT1ZGOVVXVkJGSjMwZ1BYNGdMMjExYkhScGNHRnlkRnd2Wm05eWJTMWtZWFJoT3lCaQpiM1Z1WkdGeWVUMG9MaXNwSkM4cERRb0pldzBLQ1Fra1FtOTFibVJoY25rZ1BTQW5MUzBuTGlReE95QWpJSEJzWldGelpTQnlaV1psCmNpQjBieUJTUmtNeE9EWTNJQTBLQ1FsQWJHbHpkQ0E5SUhOd2JHbDBLQzhrUW05MWJtUmhjbmt2TENBa2FXNHBPeUFOQ2drSkpFaGwKWVdSbGNrSnZaSGtnUFNBa2JHbHpkRnN4WFRzTkNna0pKRWhsWVdSbGNrSnZaSGtnUFg0Z0wxeHlYRzVjY2x4dWZGeHVYRzR2T3cwSwpDUWtrU0dWaFpHVnlJRDBnSkdBN0RRb0pDU1JDYjJSNUlEMGdKQ2M3RFFvZ0NRa2tRbTlrZVNBOWZpQnpMMXh5WEc0a0x5ODdJQ01nCmRHaGxJR3hoYzNRZ1hISmNiaUIzWVhNZ2NIVjBJR2x1SUdKNUlFNWxkSE5qWVhCbERRb0pDU1JwYm5zblptbHNaV1JoZEdFbmZTQTkKSUNSQ2IyUjVPdzBLQ1Fra1NHVmhaR1Z5SUQxK0lDOW1hV3hsYm1GdFpUMWNJaWd1S3lsY0lpODdJQTBLQ1Fra2FXNTdKMlluZlNBOQpJQ1F4T3lBTkNna0pKR2x1ZXlkbUozMGdQWDRnY3k5Y0lpOHZaenNOQ2drSkpHbHVleWRtSjMwZ1BYNGdjeTljY3k4dlp6c05DZzBLCkNRa2pJSEJoY25ObElIUnlZV2xzWlhJTkNna0pabTl5S0NScFBUSTdJQ1JzYVhOMFd5UnBYVHNnSkdrckt5a05DZ2tKZXlBTkNna0oKQ1NSc2FYTjBXeVJwWFNBOWZpQnpMMTR1SzI1aGJXVTlKQzh2T3cwS0NRa0pKR3hwYzNSYkpHbGRJRDErSUM5Y0lpaGNkeXNwWENJdgpPdzBLQ1FrSkpHdGxlU0E5SUNReE93MEtDUWtKSkhaaGJDQTlJQ1FuT3cwS0NRa0pKSFpoYkNBOWZpQnpMeWhlS0Z4eVhHNWNjbHh1CmZGeHVYRzRwS1h3b1hISmNiaVI4WEc0a0tTOHZaenNOQ2drSkNTUjJZV3dnUFg0Z2N5OGxLQzR1S1M5d1lXTnJLQ0pqSWl3Z2FHVjQKS0NReEtTa3ZaMlU3RFFvSkNRa2thVzU3Skd0bGVYMGdQU0FrZG1Gc095QU5DZ2tKZlEwS0NYME5DZ2xsYkhObElDTWdjM1JoYm1SaApjbVFnY0c5emRDQmtZWFJoSUNoMWNtd2daVzVqYjJSbFpDd2dibTkwSUcxMWJIUnBjR0Z5ZENrTkNnbDdEUW9KQ1VCcGJpQTlJSE53CmJHbDBLQzhtTHl3Z0pHbHVLVHNOQ2drSlptOXlaV0ZqYUNBa2FTQW9NQ0F1TGlBa0kybHVLUTBLQ1FsN0RRb0pDUWtrYVc1YkpHbGQKSUQxK0lITXZYQ3N2SUM5bk93MEtDUWtKS0NSclpYa3NJQ1IyWVd3cElEMGdjM0JzYVhRb0x6MHZMQ0FrYVc1YkpHbGRMQ0F5S1RzTgpDZ2tKQ1NSclpYa2dQWDRnY3k4bEtDNHVLUzl3WVdOcktDSmpJaXdnYUdWNEtDUXhLU2t2WjJVN0RRb0pDUWtrZG1Gc0lEMStJSE12CkpTZ3VMaWt2Y0dGamF5Z2lZeUlzSUdobGVDZ2tNU2twTDJkbE93MEtDUWtKSkdsdWV5UnJaWGw5SUM0OUlDSmNNQ0lnYVdZZ0tHUmwKWm1sdVpXUW9KR2x1ZXlSclpYbDlLU2s3RFFvSkNRa2thVzU3Skd0bGVYMGdMajBnSkhaaGJEc05DZ2tKZlEwS0NYME5DbjBOQ2cwSwpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLSXlCUWNtbHVkSE1nZEdobElFaFVUVXdnVUdGblpTQklaV0ZrWlhJTkNpTWcKUVhKbmRXMWxiblFnTVRvZ1JtOXliU0JwZEdWdElHNWhiV1VnZEc4Z2QyaHBZMmdnWm05amRYTWdjMmh2ZFd4a0lHSmxJSE5sZEEwSwpJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLYzNWaUlGQnlhVzUwVUdGblpVaGxZV1JsY2cwS2V3MEtDU1JGYm1OdlpHVmsKUTNWeWNtVnVkRVJwY2lBOUlDUkRkWEp5Wlc1MFJHbHlPdzBLQ1NSRmJtTnZaR1ZrUTNWeWNtVnVkRVJwY2lBOWZpQnpMeWhiWG1FdApla0V0V2pBdE9WMHBMeWNsSnk1MWJuQmhZMnNvSWtncUlpd2tNU2t2WldjN0RRb0pjSEpwYm5RZ0lrTnZiblJsYm5RdGRIbHdaVG9nCmRHVjRkQzlvZEcxc1hHNWNiaUk3RFFvSmNISnBiblFnUER4RlRrUTdEUW84YUhSdGJENE5DanhvWldGa1BnMEtQSFJwZEd4bFBuQnkKYVhZNElHTm5hU0J6YUdWc2JEd3ZkR2wwYkdVK0RRb2tTSFJ0YkUxbGRHRklaV0ZrWlhJTkNnMEtQRzFsZEdFZ2JtRnRaVDBpYTJWNQpkMjl5WkhNaUlHTnZiblJsYm5ROUluQnlhWFk0SUdObmFTQnphR1ZzYkNBZ1h5QWdJQ0FnYVRWZlFHaHZkRzFoYVd3dVkyOXRJajROCkNqeHRaWFJoSUc1aGJXVTlJbVJsYzJOeWFYQjBhVzl1SWlCamIyNTBaVzUwUFNKd2NtbDJPQ0JqWjJrZ2MyaGxiR3dnSUY4Z0lDQWcKYVRWZlFHaHZkRzFoYVd3dVkyOXRJajROQ2p3dmFHVmhaRDROQ2p4aWIyUjVJRzl1VEc5aFpEMGlaRzlqZFcxbGJuUXVaaTVBWHk1bQpiMk4xY3lncElpQmlaMk52Ykc5eVBTSWpSa1pHUmtaR0lpQjBiM0J0WVhKbmFXNDlJakFpSUd4bFpuUnRZWEpuYVc0OUlqQWlJRzFoCmNtZHBibmRwWkhSb1BTSXdJaUJ0WVhKbmFXNW9aV2xuYUhROUlqQWlJSFJsZUhROUlpTkdSakF3TURBaVBnMEtQSFJoWW14bElHSnYKY21SbGNqMGlNU0lnZDJsa2RHZzlJakV3TUNVaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNaUkrRFFvOApkSEkrRFFvOGRHUWdZbWRqYjJ4dmNqMGlJMFpHUmtaR1JpSWdZbTl5WkdWeVkyOXNiM0k5SWlOR1JrWkdSa1lpSUdGc2FXZHVQU0pqClpXNTBaWElpSUhkcFpIUm9QU0l4SlNJK0RRbzhZajQ4Wm05dWRDQnphWHBsUFNJeUlqNGpQQzltYjI1MFBqd3ZZajQ4TDNSa1BnMEsKUEhSa0lHSm5ZMjlzYjNJOUlpTkdSa1pHUmtZaUlIZHBaSFJvUFNJNU9DVWlQanhtYjI1MElHWmhZMlU5SWxabGNtUmhibUVpSUhOcAplbVU5SWpJaVBqeGlQaUFOQ2p4aUlITjBlV3hsUFNKamIyeHZjanBpYkdGamF6dGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1abVptCk5qWWlQbkJ5YVhZNElHTm5hU0J6YUdWc2JEd3ZZajRnUTI5dWJtVmpkR1ZrSUhSdklDUlRaWEoyWlhKT1lXMWxQQzlpUGp3dlptOXUKZEQ0OEwzUmtQZzBLUEM5MGNqNE5DangwY2o0TkNqeDBaQ0JqYjJ4emNHRnVQU0l5SWlCaVoyTnZiRzl5UFNJalJrWkdSa1pHSWo0OApabTl1ZENCbVlXTmxQU0pXWlhKa1lXNWhJaUJ6YVhwbFBTSXlJajROQ2cwS1BHRWdhSEpsWmowaUpGTmpjbWx3ZEV4dlkyRjBhVzl1ClAyRTlkWEJzYjJGa0ptUTlKRVZ1WTI5a1pXUkRkWEp5Wlc1MFJHbHlJajQ4Wm05dWRDQmpiMnh2Y2owaUkwWkdNREF3TUNJK1ZYQnMKYjJGa0lFWnBiR1U4TDJadmJuUStQQzloUGlCOElBMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dVAyRTlaRzkzYm14dgpZV1FtWkQwa1JXNWpiMlJsWkVOMWNuSmxiblJFYVhJaVBqeG1iMjUwSUdOdmJHOXlQU0lqUmtZd01EQXdJajVFYjNkdWJHOWhaQ0JHCmFXeGxQQzltYjI1MFBqd3ZZVDRnZkEwS1BHRWdhSEpsWmowaUpGTmpjbWx3ZEV4dlkyRjBhVzl1UDJFOWJHOW5iM1YwSWo0OFptOXUKZENCamIyeHZjajBpSTBaR01EQXdNQ0krUkdselkyOXVibVZqZER3dlptOXVkRDQ4TDJFK0lId05Dand2Wm05dWRENDhMM1JrUGcwSwpQQzkwY2o0TkNqd3ZkR0ZpYkdVK0RRbzhabTl1ZENCemFYcGxQU0l6SWo0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0RFFvaklGQnlhVzUwY3lCMGFHVWdURzluYVc0Z1UyTnlaV1Z1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHREUXB6ZFdJZ1VISnBiblJNYjJkcGJsTmpjbVZsYmcwS2V3MEtDU1JOWlhOellXZGxJRDBnY1NROEwyWnZiblErUEdneFBuQmgKYzNNOWNISnBkamc4TDJneFBqeG1iMjUwSUdOdmJHOXlQU0lqTURBNU9UQXdJaUJ6YVhwbFBTSXpJajQ4Y0hKbFBqeHBiV2NnWW05eQpaR1Z5UFNJd0lpQnpjbU05SW1oMGRIQTZMeTkzZDNjdWNISnBkamd1YVdKc2IyZG5aWEl1YjNKbkwzTXVjR2h3UHl0aloybDBaV3h1ClpYUWdjMmhsYkd3aUlIZHBaSFJvUFNJd0lpQm9aV2xuYUhROUlqQWlQand2Y0hKbFBnMEtKRHNOQ2lNbkRRb0pjSEpwYm5RZ1BEeEYKVGtRN0RRbzhZMjlrWlQ0TkNnMEtWSEo1YVc1bklDUlRaWEoyWlhKT1lXMWxMaTR1UEdKeVBnMEtRMjl1Ym1WamRHVmtJSFJ2SUNSVApaWEoyWlhKT1lXMWxQR0p5UGcwS1JYTmpZWEJsSUdOb1lYSmhZM1JsY2lCcGN5QmVYUTBLUEdOdlpHVStKRTFsYzNOaFoyVU5Da1ZPClJBMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjBhR1VnYldWemMyRm5aU0IwYUdGMApJR2x1Wm05eWJYTWdkR2hsSUhWelpYSWdiMllnWVNCbVlXbHNaV1FnYkc5bmFXNE5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwTkNuTjFZaUJRY21sdWRFeHZaMmx1Um1GcGJHVmtUV1Z6YzJGblpRMEtldzBLQ1hCeWFXNTBJRHc4UlU1RU93MEtQR052WkdVKwpEUW84WW5JK2JHOW5hVzQ2SUdGa2JXbHVQR0p5UGcwS2NHRnpjM2R2Y21RNlBHSnlQZzBLVEc5bmFXNGdhVzVqYjNKeVpXTjBQR0p5ClBqeGljajROQ2p3dlkyOWtaVDROQ2tWT1JBMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MApjeUIwYUdVZ1NGUk5UQ0JtYjNKdElHWnZjaUJzYjJkbmFXNW5JR2x1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHoKZFdJZ1VISnBiblJNYjJkcGJrWnZjbTBOQ25zTkNnbHdjbWx1ZENBOFBFVk9SRHNOQ2p4amIyUmxQZzBLRFFvOFptOXliU0J1WVcxbApQU0ptSWlCdFpYUm9iMlE5SWxCUFUxUWlJR0ZqZEdsdmJqMGlKRk5qY21sd2RFeHZZMkYwYVc5dUlqNE5DanhwYm5CMWRDQjBlWEJsClBTSm9hV1JrWlc0aUlHNWhiV1U5SW1FaUlIWmhiSFZsUFNKc2IyZHBiaUkrRFFvOEwyWnZiblErRFFvOFptOXVkQ0J6YVhwbFBTSXoKSWo0TkNteHZaMmx1T2lBOFlpQnpkSGxzWlQwaVkyOXNiM0k2WW14aFkyczdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pabVptWmpZMgpJajV3Y21sMk9DQmpaMmtnYzJobGJHdzhMMkkrUEdKeVBnMEtjR0Z6YzNkdmNtUTZQQzltYjI1MFBqeG1iMjUwSUdOdmJHOXlQU0lqCk1EQTVPVEF3SWlCemFYcGxQU0l6SWo0OGFXNXdkWFFnZEhsd1pUMGljR0Z6YzNkdmNtUWlJRzVoYldVOUluQWlQZzBLUEdsdWNIVjAKSUhSNWNHVTlJbk4xWW0xcGRDSWdkbUZzZFdVOUlrVnVkR1Z5SWo0TkNqd3ZabTl5YlQ0TkNqd3ZZMjlrWlQ0TkNrVk9SQTBLZlEwSwpEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvaklGQnlhVzUwY3lCMGFHVWdabTl2ZEdWeUlHWnZjaUIwYUdVZ1NGUk4KVENCUVlXZGxEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVSEpwYm5SUVlXZGxSbTl2ZEdWeURRcDdEUW9KCmNISnBiblFnSWp3dlptOXVkRDQ4TDJKdlpIaytQQzlvZEcxc1BpSTdEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzBOQ2lNZ1VtVjBjbVZwZG1WeklIUm9aU0IyWVd4MVpYTWdiMllnWVd4c0lHTnZiMnRwWlhNdUlGUm9aU0JqYjI5cmFXVnpJR05oCmJpQmlaU0JoWTJObGMzTmxjeUIxYzJsdVp5QjBhR1VOQ2lNZ2RtRnlhV0ZpYkdVZ0pFTnZiMnRwWlhON0p5ZDlEUW9qTFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnUjJWMFEyOXZhMmxsY3cwS2V3MEtDVUJvZEhSd1kyOXZhMmxsY3lBOUlITndiR2wwCktDODdJQzhzSkVWT1Zuc25TRlJVVUY5RFQwOUxTVVVuZlNrN0RRb0pabTl5WldGamFDQWtZMjl2YTJsbEtFQm9kSFJ3WTI5dmEybGwKY3lrTkNnbDdEUW9KQ1Nna2FXUXNJQ1IyWVd3cElEMGdjM0JzYVhRb0x6MHZMQ0FrWTI5dmEybGxLVHNOQ2drSkpFTnZiMnRwWlhONwpKR2xrZlNBOUlDUjJZV3c3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjAKYUdVZ2MyTnlaV1Z1SUhkb1pXNGdkR2hsSUhWelpYSWdiRzluY3lCdmRYUU5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOCkNuTjFZaUJRY21sdWRFeHZaMjkxZEZOamNtVmxiZzBLZXcwS0NYQnlhVzUwSUNJOFkyOWtaVDVEYjI1dVpXTjBhVzl1SUdOc2IzTmwKWkNCaWVTQm1iM0psYVdkdUlHaHZjM1F1UEdKeVBqeGljajQ4TDJOdlpHVStJanNOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFEwS0l5Qk1iMmR6SUc5MWRDQjBhR1VnZFhObGNpQmhibVFnWVd4c2IzZHpJSFJvWlNCMWMyVnlJSFJ2SUd4dloybHUKSUdGbllXbHVEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVR1Z5Wm05eWJVeHZaMjkxZEEwS2V3MEtDWEJ5CmFXNTBJQ0pUWlhRdFEyOXZhMmxsT2lCVFFWWkZSRkJYUkQwN1hHNGlPeUFqSUhKbGJXOTJaU0J3WVhOemQyOXlaQ0JqYjI5cmFXVU4KQ2drbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKd0lpazdEUW9KSmxCeWFXNTBURzluYjNWMFUyTnlaV1Z1T3cwS0RRb0pKbEJ5YVc1MApURzluYVc1VFkzSmxaVzQ3RFFvSkpsQnlhVzUwVEc5bmFXNUdiM0p0T3cwS0NTWlFjbWx1ZEZCaFoyVkdiMjkwWlhJN0RRcDlEUW9OCkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkRzhnYkc5bgphVzRnZEdobElIVnpaWEl1SUVsbUlIUm9aU0J3WVhOemQyOXlaQ0J0WVhSamFHVnpMQ0JwZEEwS0l5QmthWE53YkdGNWN5QmhJSEJoCloyVWdkR2hoZENCaGJHeHZkM01nZEdobElIVnpaWElnZEc4Z2NuVnVJR052YlcxaGJtUnpMaUJKWmlCMGFHVWdjR0Z6YzNkdmNtUWcKWkc5bGJuTW5kQTBLSXlCdFlYUmphQ0J2Y2lCcFppQnVieUJ3WVhOemQyOXlaQ0JwY3lCbGJuUmxjbVZrTENCcGRDQmthWE53YkdGNQpjeUJoSUdadmNtMGdkR2hoZENCaGJHeHZkM01nZEdobElIVnpaWElOQ2lNZ2RHOGdiRzluYVc0TkNpTXRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzBOQ25OMVlpQlFaWEptYjNKdFRHOW5hVzRnRFFwN0RRb0phV1lvSkV4dloybHVVR0Z6YzNkdmNtUWdaWEVnSkZCaApjM04zYjNKa0tTQWpJSEJoYzNOM2IzSmtJRzFoZEdOb1pXUU5DZ2w3RFFvSkNYQnlhVzUwSUNKVFpYUXRRMjl2YTJsbE9pQlRRVlpGClJGQlhSRDBrVEc5bmFXNVFZWE56ZDI5eVpEdGNiaUk3RFFvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0ltTWlLVHNOQ2drSkpsQnkKYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtMDdEUW9KQ1NaUWNtbHVkRkJoWjJWR2IyOTBaWEk3RFFvSmZRMEtDV1ZzYzJVZwpJeUJ3WVhOemQyOXlaQ0JrYVdSdUozUWdiV0YwWTJnTkNnbDdEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW5BaUtUc05DZ2tKCkpsQnlhVzUwVEc5bmFXNVRZM0psWlc0N0RRb0pDV2xtS0NSTWIyZHBibEJoYzNOM2IzSmtJRzVsSUNJaUtTQWpJSE52YldVZ2NHRnoKYzNkdmNtUWdkMkZ6SUdWdWRHVnlaV1FOQ2drSmV3MEtDUWtKSmxCeWFXNTBURzluYVc1R1lXbHNaV1JOWlhOellXZGxPdzBLRFFvSgpDWDBOQ2drSkpsQnlhVzUwVEc5bmFXNUdiM0p0T3cwS0NRa21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93MEtDWDBOQ24wTkNnMEtJeTB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1ptOXliU0IwYUdGMElHRnNiRzkzY3lCMAphR1VnZFhObGNpQjBieUJsYm5SbGNpQmpiMjF0WVc1a2N3MEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLYzNWaUlGQnkKYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtME5DbnNOQ2dra1VISnZiWEIwSUQwZ0pGZHBiazVVSUQ4Z0lpUkRkWEp5Wlc1MApSR2x5UGlBaUlEb2dJbHRoWkcxcGJseEFKRk5sY25abGNrNWhiV1VnSkVOMWNuSmxiblJFYVhKZFhDUWdJanNOQ2dsd2NtbHVkQ0E4ClBFVk9SRHNOQ2p4amIyUmxQZzBLUEdadmNtMGdibUZ0WlQwaVppSWdiV1YwYUc5a1BTSlFUMU5VSWlCaFkzUnBiMjQ5SWlSVFkzSnAKY0hSTWIyTmhkR2x2YmlJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmhJaUIyWVd4MVpUMGlZMjl0YldGdQpaQ0krRFFvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZzBLCkpGQnliMjF3ZEEwS1BHbHVjSFYwSUhSNWNHVTlJblJsZUhRaUlHNWhiV1U5SW1NaVBnMEtQR2x1Y0hWMElIUjVjR1U5SW5OMVltMXAKZENJZ2RtRnNkV1U5SWtWdWRHVnlJajROQ2p3dlptOXliVDROQ2p3dlkyOWtaVDROQ2cwS1JVNUVEUXA5RFFvTkNpTXRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzBOQ2lNZ1VISnBiblJ6SUhSb1pTQklWRTFNSUdadmNtMGdkR2hoZENCaGJHeHZkM01nZEdobElIVnoKWlhJZ2RHOGdaRzkzYm14dllXUWdabWxzWlhNTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRVpwCmJHVkViM2R1Ykc5aFpFWnZjbTBOQ25zTkNna2tVSEp2YlhCMElEMGdKRmRwYms1VUlEOGdJaVJEZFhKeVpXNTBSR2x5UGlBaUlEb2cKSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNnbHdjbWx1ZENBOFBFVk9SRHNOQ2p4agpiMlJsUGcwS1BHWnZjbTBnYm1GdFpUMGlaaUlnYldWMGFHOWtQU0pRVDFOVUlpQmhZM1JwYjI0OUlpUlRZM0pwY0hSTWIyTmhkR2x2CmJpSStEUW84YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0prSWlCMllXeDFaVDBpSkVOMWNuSmxiblJFYVhJaVBnMEsKUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZ2JtRnRaVDBpWVNJZ2RtRnNkV1U5SW1SdmQyNXNiMkZrSWo0TkNpUlFjbTl0Y0hRZwpaRzkzYm14dllXUThZbkkrUEdKeVBnMEtSbWxzWlc1aGJXVTZJRHhwYm5CMWRDQjBlWEJsUFNKMFpYaDBJaUJ1WVcxbFBTSm1JaUJ6CmFYcGxQU0l6TlNJK1BHSnlQanhpY2o0TkNrUnZkMjVzYjJGa09pQThhVzV3ZFhRZ2RIbHdaVDBpYzNWaWJXbDBJaUIyWVd4MVpUMGkKUW1WbmFXNGlQZzBLUEM5bWIzSnRQZzBLUEM5amIyUmxQZzBLUlU1RURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTME5DaU1nVUhKcGJuUnpJSFJvWlNCSVZFMU1JR1p2Y20wZ2RHaGhkQ0JoYkd4dmQzTWdkR2hsSUhWelpYSWdkRzhnZFhCc2IyRmsKSUdacGJHVnpEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVSEpwYm5SR2FXeGxWWEJzYjJGa1JtOXliUTBLCmV3MEtDU1JRY205dGNIUWdQU0FrVjJsdVRsUWdQeUFpSkVOMWNuSmxiblJFYVhJK0lDSWdPaUFpVzJGa2JXbHVYRUFrVTJWeWRtVnkKVG1GdFpTQWtRM1Z5Y21WdWRFUnBjbDFjSkNBaU93MEtDWEJ5YVc1MElEdzhSVTVFT3cwS1BHTnZaR1UrRFFvTkNqeG1iM0p0SUc1aApiV1U5SW1ZaUlHVnVZM1I1Y0dVOUltMTFiSFJwY0dGeWRDOW1iM0p0TFdSaGRHRWlJRzFsZEdodlpEMGlVRTlUVkNJZ1lXTjBhVzl1ClBTSWtVMk55YVhCMFRHOWpZWFJwYjI0aVBnMEtKRkJ5YjIxd2RDQjFjR3h2WVdROFluSStQR0p5UGcwS1JtbHNaVzVoYldVNklEeHAKYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1JaUJ6YVhwbFBTSXpOU0krUEdKeVBqeGljajROQ2s5d2RHbHZibk02SUNadQpZbk53T3p4cGJuQjFkQ0IwZVhCbFBTSmphR1ZqYTJKdmVDSWdibUZ0WlQwaWJ5SWdkbUZzZFdVOUltOTJaWEozY21sMFpTSStEUXBQCmRtVnlkM0pwZEdVZ2FXWWdhWFFnUlhocGMzUnpQR0p5UGp4aWNqNE5DbFZ3Ykc5aFpEb21ibUp6Y0RzbWJtSnpjRHNtYm1KemNEczgKYVc1d2RYUWdkSGx3WlQwaWMzVmliV2wwSWlCMllXeDFaVDBpUW1WbmFXNGlQZzBLUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZwpibUZ0WlQwaVpDSWdkbUZzZFdVOUlpUkRkWEp5Wlc1MFJHbHlJajROQ2p4cGJuQjFkQ0IwZVhCbFBTSm9hV1JrWlc0aUlHNWhiV1U5CkltRWlJSFpoYkhWbFBTSjFjR3h2WVdRaVBnMEtQQzltYjNKdFBnMEtQQzlqYjJSbFBnMEtSVTVFRFFwOURRb05DaU10TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2QyaGxiaUIwYUdVZ2RHbHRaVzkxCmRDQm1iM0lnWVNCamIyMXRZVzVrSUdWNGNHbHlaWE11SUZkbElHNWxaV1FnZEc4TkNpTWdkR1Z5YldsdVlYUmxJSFJvWlNCelkzSnAKY0hRZ2FXMXRaV1JwWVhSbGJIa3VJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdkbUZzYVdRZ2IyNXNlU0J2YmlCVmJtbDRMaUJKZENCcApjdzBLSXlCdVpYWmxjaUJqWVd4c1pXUWdkMmhsYmlCMGFHVWdjMk55YVhCMElHbHpJSEoxYm01cGJtY2diMjRnVGxRdURRb2pMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdRMjl0YldGdVpGUnBiV1Z2ZFhRTkNuc05DZ2xwWmlnaEpGZHBiazVVS1EwSwpDWHNOQ2drSllXeGhjbTBvTUNrN0RRb0pDWEJ5YVc1MElEdzhSVTVFT3cwS1BDOTRiWEErRFFvTkNqeGpiMlJsUGcwS1EyOXRiV0Z1ClpDQmxlR05sWldSbFpDQnRZWGhwYlhWdElIUnBiV1VnYjJZZ0pFTnZiVzFoYm1SVWFXMWxiM1YwUkhWeVlYUnBiMjRnYzJWamIyNWsKS0hNcExnMEtQR0p5UGt0cGJHeGxaQ0JwZENFTkNrVk9SQTBLQ1FrbVVISnBiblJEYjIxdFlXNWtUR2x1WlVsdWNIVjBSbTl5YlRzTgpDZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2drSlpYaHBkRHNOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkRzhnWlhobFkzVjBaU0JqYjIxdFlXNWtjeTRnU1hRZwpaR2x6Y0d4aGVYTWdkR2hsSUc5MWRIQjFkQ0J2WmlCMGFHVU5DaU1nWTI5dGJXRnVaQ0JoYm1RZ1lXeHNiM2R6SUhSb1pTQjFjMlZ5CklIUnZJR1Z1ZEdWeUlHRnViM1JvWlhJZ1kyOXRiV0Z1WkM0Z1ZHaGxJR05vWVc1blpTQmthWEpsWTNSdmNua05DaU1nWTI5dGJXRnUKWkNCcGN5Qm9ZVzVrYkdWa0lHUnBabVpsY21WdWRHeDVMaUJKYmlCMGFHbHpJR05oYzJVc0lIUm9aU0J1WlhjZ1pHbHlaV04wYjNKNQpJR2x6SUhOMGIzSmxaQ0JwYmcwS0l5QmhiaUJwYm5SbGNtNWhiQ0IyWVhKcFlXSnNaU0JoYm1RZ2FYTWdkWE5sWkNCbFlXTm9JSFJwCmJXVWdZU0JqYjIxdFlXNWtJR2hoY3lCMGJ5QmlaU0JsZUdWamRYUmxaQzRnVkdobERRb2pJRzkxZEhCMWRDQnZaaUIwYUdVZ1kyaGgKYm1kbElHUnBjbVZqZEc5eWVTQmpiMjF0WVc1a0lHbHpJRzV2ZENCa2FYTndiR0Y1WldRZ2RHOGdkR2hsSUhWelpYSnpEUW9qSUhSbwpaWEpsWm05eVpTQmxjbkp2Y2lCdFpYTnpZV2RsY3lCallXNXViM1FnWW1VZ1pHbHpjR3hoZVdWa0xnMEtJeTB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFEwS2MzVmlJRVY0WldOMWRHVkRiMjF0WVc1a0RRcDdEUW9KYVdZb0pGSjFia052YlcxaGJtUWdQWDRnYlM5ZQpYSE1xWTJSY2N5c29MaXNwTHlrZ0l5QnBkQ0JwY3lCaElHTm9ZVzVuWlNCa2FYSWdZMjl0YldGdVpBMEtDWHNOQ2drSkl5QjNaU0JqCmFHRnVaMlVnZEdobElHUnBjbVZqZEc5eWVTQnBiblJsY201aGJHeDVMaUJVYUdVZ2IzVjBjSFYwSUc5bUlIUm9aUTBLQ1FraklHTnYKYlcxaGJtUWdhWE1nYm05MElHUnBjM0JzWVhsbFpDNE5DZ2tKRFFvSkNTUlBiR1JFYVhJZ1BTQWtRM1Z5Y21WdWRFUnBjanNOQ2drSgpKRU52YlcxaGJtUWdQU0FpWTJRZ1hDSWtRM1Z5Y21WdWRFUnBjbHdpSWk0a1EyMWtVMlZ3TGlKalpDQWtNU0l1SkVOdFpGTmxjQzRrClEyMWtVSGRrT3cwS0NRbGphRzl3S0NSRGRYSnlaVzUwUkdseUlEMGdZQ1JEYjIxdFlXNWtZQ2s3RFFvSkNTWlFjbWx1ZEZCaFoyVkkKWldGa1pYSW9JbU1pS1RzTkNna0pKRkJ5YjIxd2RDQTlJQ1JYYVc1T1ZDQS9JQ0lrVDJ4a1JHbHlQaUFpSURvZ0lsdGhaRzFwYmx4QQpKRk5sY25abGNrNWhiV1VnSkU5c1pFUnBjbDFjSkNBaU93MEtDUWx3Y21sdWRDQWlKRkJ5YjIxd2RDQWtVblZ1UTI5dGJXRnVaQ0k3CkRRb0pmUTBLQ1dWc2MyVWdJeUJ6YjIxbElHOTBhR1Z5SUdOdmJXMWhibVFzSUdScGMzQnNZWGtnZEdobElHOTFkSEIxZEEwS0NYc04KQ2drSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVl5SXBPdzBLQ1Fra1VISnZiWEIwSUQwZ0pGZHBiazVVSUQ4Z0lpUkRkWEp5Wlc1MApSR2x5UGlBaUlEb2dJbHRoWkcxcGJseEFKRk5sY25abGNrNWhiV1VnSkVOMWNuSmxiblJFYVhKZFhDUWdJanNOQ2drSmNISnBiblFnCklpUlFjbTl0Y0hRZ0pGSjFia052YlcxaGJtUThlRzF3UGlJN0RRb0pDU1JEYjIxdFlXNWtJRDBnSW1Oa0lGd2lKRU4xY25KbGJuUkUKYVhKY0lpSXVKRU50WkZObGNDNGtVblZ1UTI5dGJXRnVaQzRrVW1Wa2FYSmxZM1J2Y2pzTkNna0phV1lvSVNSWGFXNU9WQ2tOQ2drSgpldzBLQ1FrSkpGTkpSM3NuUVV4U1RTZDlJRDBnWENaRGIyMXRZVzVrVkdsdFpXOTFkRHNOQ2drSkNXRnNZWEp0S0NSRGIyMXRZVzVrClZHbHRaVzkxZEVSMWNtRjBhVzl1S1RzTkNna0pmUTBLQ1FscFppZ2tVMmh2ZDBSNWJtRnRhV05QZFhSd2RYUXBJQ01nYzJodmR5QnYKZFhSd2RYUWdZWE1nYVhRZ2FYTWdaMlZ1WlhKaGRHVmtEUW9KQ1hzTkNna0pDU1I4UFRFN0RRb0pDUWtrUTI5dGJXRnVaQ0F1UFNBaQpJSHdpT3cwS0NRa0piM0JsYmloRGIyMXRZVzVrVDNWMGNIVjBMQ0FrUTI5dGJXRnVaQ2s3RFFvSkNRbDNhR2xzWlNnOFEyOXRiV0Z1ClpFOTFkSEIxZEQ0cERRb0pDUWw3RFFvSkNRa0pKRjhnUFg0Z2N5OG9YRzU4WEhKY2Jpa2tMeTg3RFFvSkNRa0pjSEpwYm5RZ0lpUmYKWEc0aU93MEtDUWtKZlEwS0NRa0pKSHc5TURzTkNna0pmUTBLQ1FsbGJITmxJQ01nYzJodmR5QnZkWFJ3ZFhRZ1lXWjBaWElnWTI5dApiV0Z1WkNCamIyMXdiR1YwWlhNTkNna0pldzBLQ1FrSmNISnBiblFnWUNSRGIyMXRZVzVrWURzTkNna0pmUTBLQ1FscFppZ2hKRmRwCmJrNVVLUTBLQ1FsN0RRb0pDUWxoYkdGeWJTZ3dLVHNOQ2drSmZRMEtDUWx3Y21sdWRDQWlQQzk0YlhBK0lqc05DZ2w5RFFvSkpsQnkKYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtMDdEUW9KSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ24wTkNnMEtJeTB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlVhR2x6SUdaMWJtTjBhVzl1SUdScGMzQnNZWGx6SUhSb1pTQndZV2RsSUhSb1lYUWcKWTI5dWRHRnBibk1nWVNCc2FXNXJJSGRvYVdOb0lHRnNiRzkzY3lCMGFHVWdkWE5sY2cwS0l5QjBieUJrYjNkdWJHOWhaQ0IwYUdVZwpjM0JsWTJsbWFXVmtJR1pwYkdVdUlGUm9aU0J3WVdkbElHRnNjMjhnWTI5dWRHRnBibk1nWVNCaGRYUnZMWEpsWm5KbGMyZ05DaU1nClptVmhkSFZ5WlNCMGFHRjBJSE4wWVhKMGN5QjBhR1VnWkc5M2JteHZZV1FnWVhWMGIyMWhkR2xqWVd4c2VTNE5DaU1nUVhKbmRXMWwKYm5RZ01Ub2dSblZzYkhrZ2NYVmhiR2xtYVdWa0lHWnBiR1Z1WVcxbElHOW1JSFJvWlNCbWFXeGxJSFJ2SUdKbElHUnZkMjVzYjJGawpaV1FOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNuTjFZaUJRY21sdWRFUnZkMjVzYjJGa1RHbHVhMUJoWjJVTkNuc04KQ2dsc2IyTmhiQ2drUm1sc1pWVnliQ2tnUFNCQVh6c05DZ2xwWmlndFpTQWtSbWxzWlZWeWJDa2dJeUJwWmlCMGFHVWdabWxzWlNCbAplR2x6ZEhNTkNnbDdEUW9KQ1NNZ1pXNWpiMlJsSUhSb1pTQm1hV3hsSUd4cGJtc2djMjhnZDJVZ1kyRnVJSE5sYm1RZ2FYUWdkRzhnCmRHaGxJR0p5YjNkelpYSU5DZ2tKSkVacGJHVlZjbXdnUFg0Z2N5OG9XMTVoTFhwQkxWb3dMVGxkS1M4bkpTY3VkVzV3WVdOcktDSkkKS2lJc0pERXBMMlZuT3cwS0NRa2tSRzkzYm14dllXUk1hVzVySUQwZ0lpUlRZM0pwY0hSTWIyTmhkR2x2Ymo5aFBXUnZkMjVzYjJGawpKbVk5SkVacGJHVlZjbXdtYnoxbmJ5STdEUW9KQ1NSSWRHMXNUV1YwWVVobFlXUmxjaUE5SUNJOGJXVjBZU0JJVkZSUUxVVlJWVWxXClBWd2lVbVZtY21WemFGd2lJRU5QVGxSRlRsUTlYQ0l4T3lCVlVrdzlKRVJ2ZDI1c2IyRmtUR2x1YTF3aVBpSTdEUW9KQ1NaUWNtbHUKZEZCaFoyVklaV0ZrWlhJb0ltTWlLVHNOQ2drSmNISnBiblFnUER4RlRrUTdEUW84WTI5a1pUNE5DZzBLVTJWdVpHbHVaeUJHYVd4bApJQ1JVY21GdWMyWmxja1pwYkdVdUxpNDhZbkkrRFFwSlppQjBhR1VnWkc5M2JteHZZV1FnWkc5bGN5QnViM1FnYzNSaGNuUWdZWFYwCmIyMWhkR2xqWVd4c2VTd05DanhoSUdoeVpXWTlJaVJFYjNkdWJHOWhaRXhwYm1zaVBrTnNhV05ySUVobGNtVThMMkUrTGcwS1JVNUUKRFFvSkNTWlFjbWx1ZEVOdmJXMWhibVJNYVc1bFNXNXdkWFJHYjNKdE93MEtDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLQ1gwTgpDZ2xsYkhObElDTWdabWxzWlNCa2IyVnpiaWQwSUdWNGFYTjBEUW9KZXcwS0NRa21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSm1JaWs3CkRRb0pDWEJ5YVc1MElDSkdZV2xzWldRZ2RHOGdaRzkzYm14dllXUWdKRVpwYkdWVmNtdzZJQ1FoSWpzTkNna0pKbEJ5YVc1MFJtbHMKWlVSdmQyNXNiMkZrUm05eWJUc05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnlaV0ZrY3lCMGFHVWdjM0JsWTJsbWFXVmtJR1pwYkdVZ1puSnYKYlNCMGFHVWdaR2x6YXlCaGJtUWdjMlZ1WkhNZ2FYUWdkRzhnZEdobERRb2pJR0p5YjNkelpYSXNJSE52SUhSb1lYUWdhWFFnWTJGdQpJR0psSUdSdmQyNXNiMkZrWldRZ1lua2dkR2hsSUhWelpYSXVEUW9qSUVGeVozVnRaVzUwSURFNklFWjFiR3g1SUhGMVlXeHBabWxsClpDQndZWFJvYm1GdFpTQnZaaUIwYUdVZ1ptbHNaU0IwYnlCaVpTQnpaVzUwTGcwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUTBLYzNWaUlGTmxibVJHYVd4bFZHOUNjbTkzYzJWeURRcDdEUW9KYkc5allXd29KRk5sYm1SR2FXeGxLU0E5SUVCZk93MEtDV2xtCktHOXdaVzRvVTBWT1JFWkpURVVzSUNSVFpXNWtSbWxzWlNrcElDTWdabWxzWlNCdmNHVnVaV1FnWm05eUlISmxZV1JwYm1jTkNnbDcKRFFvSkNXbG1LQ1JYYVc1T1ZDa05DZ2tKZXcwS0NRa0pZbWx1Ylc5a1pTaFRSVTVFUmtsTVJTazdEUW9KQ1FsaWFXNXRiMlJsS0ZOVQpSRTlWVkNrN0RRb0pDWDBOQ2drSkpFWnBiR1ZUYVhwbElEMGdLSE4wWVhRb0pGTmxibVJHYVd4bEtTbGJOMTA3RFFvSkNTZ2tSbWxzClpXNWhiV1VnUFNBa1UyVnVaRVpwYkdVcElEMStJQ0J0SVNoYlhpOWVYRnhkS2lra0lUc05DZ2tKY0hKcGJuUWdJa052Ym5SbGJuUXQKVkhsd1pUb2dZWEJ3YkdsallYUnBiMjR2ZUMxMWJtdHViM2R1WEc0aU93MEtDUWx3Y21sdWRDQWlRMjl1ZEdWdWRDMU1aVzVuZEdnNgpJQ1JHYVd4bFUybDZaVnh1SWpzTkNna0pjSEpwYm5RZ0lrTnZiblJsYm5RdFJHbHpjRzl6YVhScGIyNDZJR0YwZEdGamFHMWxiblE3CklHWnBiR1Z1WVcxbFBTUXhYRzVjYmlJN0RRb0pDWEJ5YVc1MElIZG9hV3hsS0R4VFJVNUVSa2xNUlQ0cE93MEtDUWxqYkc5elpTaFQKUlU1RVJrbE1SU2s3RFFvSmZRMEtDV1ZzYzJVZ0l5Qm1ZV2xzWldRZ2RHOGdiM0JsYmlCbWFXeGxEUW9KZXcwS0NRa21VSEpwYm5SUQpZV2RsU0dWaFpHVnlLQ0ptSWlrN0RRb0pDWEJ5YVc1MElDSkdZV2xzWldRZ2RHOGdaRzkzYm14dllXUWdKRk5sYm1SR2FXeGxPaUFrCklTSTdEUW9KQ1NaUWNtbHVkRVpwYkdWRWIzZHViRzloWkVadmNtMDdEUW9OQ2drSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNnbDkKRFFwOURRb05DZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlVhR2x6SUdaMWJtTjBhVzl1SUdseklHTmhiR3hsClpDQjNhR1Z1SUhSb1pTQjFjMlZ5SUdSdmQyNXNiMkZrY3lCaElHWnBiR1V1SUVsMElHUnBjM0JzWVhseklHRWdiV1Z6YzJGblpRMEsKSXlCMGJ5QjBhR1VnZFhObGNpQmhibVFnY0hKdmRtbGtaWE1nWVNCc2FXNXJJSFJvY205MVoyZ2dkMmhwWTJnZ2RHaGxJR1pwYkdVZwpZMkZ1SUdKbElHUnZkMjVzYjJGa1pXUXVEUW9qSUZSb2FYTWdablZ1WTNScGIyNGdhWE1nWVd4emJ5QmpZV3hzWldRZ2QyaGxiaUIwCmFHVWdkWE5sY2lCamJHbGphM01nYjI0Z2RHaGhkQ0JzYVc1ckxpQkpiaUIwYUdseklHTmhjMlVzRFFvaklIUm9aU0JtYVd4bElHbHoKSUhKbFlXUWdZVzVrSUhObGJuUWdkRzhnZEdobElHSnliM2R6WlhJdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6CmRXSWdRbVZuYVc1RWIzZHViRzloWkEwS2V3MEtDU01nWjJWMElHWjFiR3g1SUhGMVlXeHBabWxsWkNCd1lYUm9JRzltSUhSb1pTQm0KYVd4bElIUnZJR0psSUdSdmQyNXNiMkZrWldRTkNnbHBaaWdvSkZkcGJrNVVJQ1lnS0NSVWNtRnVjMlpsY2tacGJHVWdQWDRnYlM5ZQpYRng4WGk0Nkx5a3BJSHdOQ2drSktDRWtWMmx1VGxRZ0ppQW9KRlJ5WVc1elptVnlSbWxzWlNBOWZpQnRMMTVjTHk4cEtTa2dJeUJ3CllYUm9JR2x6SUdGaWMyOXNkWFJsRFFvSmV3MEtDUWtrVkdGeVoyVjBSbWxzWlNBOUlDUlVjbUZ1YzJabGNrWnBiR1U3RFFvSmZRMEsKQ1dWc2MyVWdJeUJ3WVhSb0lHbHpJSEpsYkdGMGFYWmxEUW9KZXcwS0NRbGphRzl3S0NSVVlYSm5aWFJHYVd4bEtTQnBaaWdrVkdGeQpaMlYwUm1sc1pTQTlJQ1JEZFhKeVpXNTBSR2x5S1NBOWZpQnRMMXRjWEZ3dlhTUXZPdzBLQ1Fra1ZHRnlaMlYwUm1sc1pTQXVQU0FrClVHRjBhRk5sY0M0a1ZISmhibk5tWlhKR2FXeGxPdzBLQ1gwTkNnMEtDV2xtS0NSUGNIUnBiMjV6SUdWeElDSm5ieUlwSUNNZ2QyVWcKYUdGMlpTQjBieUJ6Wlc1a0lIUm9aU0JtYVd4bERRb0pldzBLQ1FrbVUyVnVaRVpwYkdWVWIwSnliM2R6WlhJb0pGUmhjbWRsZEVacApiR1VwT3cwS0NYME5DZ2xsYkhObElDTWdkMlVnYUdGMlpTQjBieUJ6Wlc1a0lHOXViSGtnZEdobElHeHBibXNnY0dGblpRMEtDWHNOCkNna0pKbEJ5YVc1MFJHOTNibXh2WVdSTWFXNXJVR0ZuWlNna1ZHRnlaMlYwUm1sc1pTazdEUW9KZlEwS2ZRMEtEUW9qTFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdZMkZzYkdWa0lIZG9aVzRnZEdobElIVnpaWElnCmQyRnVkSE1nZEc4Z2RYQnNiMkZrSUdFZ1ptbHNaUzRnU1dZZ2RHaGxEUW9qSUdacGJHVWdhWE1nYm05MElITndaV05wWm1sbFpDd2cKYVhRZ1pHbHpjR3hoZVhNZ1lTQm1iM0p0SUdGc2JHOTNhVzVuSUhSb1pTQjFjMlZ5SUhSdklITndaV05wWm5rZ1lRMEtJeUJtYVd4bApMQ0J2ZEdobGNuZHBjMlVnYVhRZ2MzUmhjblJ6SUhSb1pTQjFjR3h2WVdRZ2NISnZZMlZ6Y3k0TkNpTXRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzBOQ25OMVlpQlZjR3h2WVdSR2FXeGxEUXA3RFFvSkl5QnBaaUJ1YnlCbWFXeGxJR2x6SUhOd1pXTnBabWxsWkN3ZwpjSEpwYm5RZ2RHaGxJSFZ3Ykc5aFpDQm1iM0p0SUdGbllXbHVEUW9KYVdZb0pGUnlZVzV6Wm1WeVJtbHNaU0JsY1NBaUlpa05DZ2w3CkRRb0pDU1pRY21sdWRGQmhaMlZJWldGa1pYSW9JbVlpS1RzTkNna0pKbEJ5YVc1MFJtbHNaVlZ3Ykc5aFpFWnZjbTA3RFFvSkNTWlEKY21sdWRGQmhaMlZHYjI5MFpYSTdEUW9KQ1hKbGRIVnlianNOQ2dsOURRb0pKbEJ5YVc1MFVHRm5aVWhsWVdSbGNpZ2lZeUlwT3cwSwpEUW9KSXlCemRHRnlkQ0IwYUdVZ2RYQnNiMkZrYVc1bklIQnliMk5sYzNNTkNnbHdjbWx1ZENBaVZYQnNiMkZrYVc1bklDUlVjbUZ1CmMyWmxja1pwYkdVZ2RHOGdKRU4xY25KbGJuUkVhWEl1TGk0OFluSStJanNOQ2cwS0NTTWdaMlYwSUhSb1pTQm1kV3hzYkhrZ2NYVmgKYkdsbWFXVmtJSEJoZEdodVlXMWxJRzltSUhSb1pTQm1hV3hsSUhSdklHSmxJR055WldGMFpXUU5DZ2xqYUc5d0tDUlVZWEpuWlhSTwpZVzFsS1NCcFppQW9KRlJoY21kbGRFNWhiV1VnUFNBa1EzVnljbVZ1ZEVScGNpa2dQWDRnYlM5YlhGeGNMMTBrTHpzTkNna2tWSEpoCmJuTm1aWEpHYVd4bElEMStJRzBoS0Z0ZUwxNWNYRjBxS1NRaE93MEtDU1JVWVhKblpYUk9ZVzFsSUM0OUlDUlFZWFJvVTJWd0xpUXgKT3cwS0RRb0pKRlJoY21kbGRFWnBiR1ZUYVhwbElEMGdiR1Z1WjNSb0tDUnBibnNuWm1sc1pXUmhkR0VuZlNrN0RRb0pJeUJwWmlCMAphR1VnWm1sc1pTQmxlR2x6ZEhNZ1lXNWtJSGRsSUdGeVpTQnViM1FnYzNWd2NHOXpaV1FnZEc4Z2IzWmxjbmR5YVhSbElHbDBEUW9KCmFXWW9MV1VnSkZSaGNtZGxkRTVoYldVZ0ppWWdKRTl3ZEdsdmJuTWdibVVnSW05MlpYSjNjbWwwWlNJcERRb0pldzBLQ1Fsd2NtbHUKZENBaVJtRnBiR1ZrT2lCRVpYTjBhVzVoZEdsdmJpQm1hV3hsSUdGc2NtVmhaSGtnWlhocGMzUnpManhpY2o0aU93MEtDWDBOQ2dsbApiSE5sSUNNZ1ptbHNaU0JwY3lCdWIzUWdjSEpsYzJWdWRBMEtDWHNOQ2drSmFXWW9iM0JsYmloVlVFeFBRVVJHU1V4RkxDQWlQaVJVCllYSm5aWFJPWVcxbElpa3BEUW9KQ1hzTkNna0pDV0pwYm0xdlpHVW9WVkJNVDBGRVJrbE1SU2tnYVdZZ0pGZHBiazVVT3cwS0NRa0oKY0hKcGJuUWdWVkJNVDBGRVJrbE1SU0FrYVc1N0oyWnBiR1ZrWVhSaEozMDdEUW9KQ1FsamJHOXpaU2hWVUV4UFFVUkdTVXhGS1RzTgpDZ2tKQ1hCeWFXNTBJQ0pVY21GdWMyWmxjbVZrSUNSVVlYSm5aWFJHYVd4bFUybDZaU0JDZVhSbGN5NDhZbkkrSWpzTkNna0pDWEJ5CmFXNTBJQ0pHYVd4bElGQmhkR2c2SUNSVVlYSm5aWFJPWVcxbFBHSnlQaUk3RFFvSkNYME5DZ2tKWld4elpRMEtDUWw3RFFvSkNRbHcKY21sdWRDQWlSbUZwYkdWa09pQWtJVHhpY2o0aU93MEtDUWw5RFFvSmZRMEtDWEJ5YVc1MElDSWlPdzBLQ1NaUWNtbHVkRU52YlcxaApibVJNYVc1bFNXNXdkWFJHYjNKdE93MEtEUW9KSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFEwS0l5QlVhR2x6SUdaMWJtTjBhVzl1SUdseklHTmhiR3hsWkNCM2FHVnVJSFJvWlNCMWMyVnlJSGRoYm5SegpJSFJ2SUdSdmQyNXNiMkZrSUdFZ1ptbHNaUzRnU1dZZ2RHaGxEUW9qSUdacGJHVnVZVzFsSUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzCklHbDBJR1JwYzNCc1lYbHpJR0VnWm05eWJTQmhiR3h2ZDJsdVp5QjBhR1VnZFhObGNpQjBieUJ6Y0dWamFXWjVJR0VOQ2lNZ1ptbHMKWlN3Z2IzUm9aWEozYVhObElHbDBJR1JwYzNCc1lYbHpJR0VnYldWemMyRm5aU0IwYnlCMGFHVWdkWE5sY2lCaGJtUWdjSEp2ZG1sawpaWE1nWVNCc2FXNXJEUW9qSUhSb2NtOTFaMmdnSUhkb2FXTm9JSFJvWlNCbWFXeGxJR05oYmlCaVpTQmtiM2R1Ykc5aFpHVmtMZzBLCkl5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQKTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUVSdmQyNXNiMkZrUm1sc1pRMEtldzBLQ1NNZ2FXWWdibThnWm1scwpaU0JwY3lCemNHVmphV1pwWldRc0lIQnlhVzUwSUhSb1pTQmtiM2R1Ykc5aFpDQm1iM0p0SUdGbllXbHVEUW9KYVdZb0pGUnlZVzV6ClptVnlSbWxzWlNCbGNTQWlJaWtOQ2dsN0RRb0pDU1pRY21sdWRGQmhaMlZJWldGa1pYSW9JbVlpS1RzTkNna0pKbEJ5YVc1MFJtbHMKWlVSdmQyNXNiMkZrUm05eWJUc05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2drSmNtVjBkWEp1T3cwS0NYME5DZ2tOQ2dragpJR2RsZENCbWRXeHNlU0J4ZFdGc2FXWnBaV1FnY0dGMGFDQnZaaUIwYUdVZ1ptbHNaU0IwYnlCaVpTQmtiM2R1Ykc5aFpHVmtEUW9KCmFXWW9LQ1JYYVc1T1ZDQW1JQ2drVkhKaGJuTm1aWEpHYVd4bElEMStJRzB2WGx4Y2ZGNHVPaThwS1NCOERRb0pDU2doSkZkcGJrNVUKSUNZZ0tDUlVjbUZ1YzJabGNrWnBiR1VnUFg0Z2JTOWVYQzh2S1NrcElDTWdjR0YwYUNCcGN5QmhZbk52YkhWMFpRMEtDWHNOQ2drSgpKRlJoY21kbGRFWnBiR1VnUFNBa1ZISmhibk5tWlhKR2FXeGxPdzBLQ1gwTkNnbGxiSE5sSUNNZ2NHRjBhQ0JwY3lCeVpXeGhkR2wyClpRMEtDWHNOQ2drSlkyaHZjQ2drVkdGeVoyVjBSbWxzWlNrZ2FXWW9KRlJoY21kbGRFWnBiR1VnUFNBa1EzVnljbVZ1ZEVScGNpa2cKUFg0Z2JTOWJYRnhjTDEwa0x6c05DZ2tKSkZSaGNtZGxkRVpwYkdVZ0xqMGdKRkJoZEdoVFpYQXVKRlJ5WVc1elptVnlSbWxzWlRzTgpDZ2w5RFFvTkNnbHBaaWdrVDNCMGFXOXVjeUJsY1NBaVoyOGlLU0FqSUhkbElHaGhkbVVnZEc4Z2MyVnVaQ0IwYUdVZ1ptbHNaUTBLCkNYc05DZ2tKSmxObGJtUkdhV3hsVkc5Q2NtOTNjMlZ5S0NSVVlYSm5aWFJHYVd4bEtUc05DZ2w5RFFvSlpXeHpaU0FqSUhkbElHaGgKZG1VZ2RHOGdjMlZ1WkNCdmJteDVJSFJvWlNCc2FXNXJJSEJoWjJVTkNnbDdEUW9KQ1NaUWNtbHVkRVJ2ZDI1c2IyRmtUR2x1YTFCaApaMlVvSkZSaGNtZGxkRVpwYkdVcE93MEtDWDBOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0CkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUTBLSXlCTllXbHUKSUZCeWIyZHlZVzBnTFNCRmVHVmpkWFJwYjI0Z1UzUmhjblJ6SUVobGNtVU5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdApMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOCkNpWlNaV0ZrVUdGeWMyVTdEUW9tUjJWMFEyOXZhMmxsY3pzTkNnMEtKRk5qY21sd2RFeHZZMkYwYVc5dUlEMGdKRVZPVm5zblUwTlMKU1ZCVVgwNUJUVVVuZlRzTkNpUlRaWEoyWlhKT1lXMWxJRDBnSkVWT1Zuc25VMFZTVmtWU1gwNUJUVVVuZlRzTkNpUk1iMmRwYmxCaApjM04zYjNKa0lEMGdKR2x1ZXlkd0ozMDdEUW9rVW5WdVEyOXRiV0Z1WkNBOUlDUnBibnNuWXlkOU93MEtKRlJ5WVc1elptVnlSbWxzClpTQTlJQ1JwYm5zblppZDlPdzBLSkU5d2RHbHZibk1nUFNBa2FXNTdKMjhuZlRzTkNnMEtKRUZqZEdsdmJpQTlJQ1JwYm5zbllTZDkKT3cwS0pFRmpkR2x2YmlBOUlDSnNiMmRwYmlJZ2FXWW9KRUZqZEdsdmJpQmxjU0FpSWlrN0lDTWdibThnWVdOMGFXOXVJSE53WldOcApabWxsWkN3Z2RYTmxJR1JsWm1GMWJIUU5DZzBLSXlCblpYUWdkR2hsSUdScGNtVmpkRzl5ZVNCcGJpQjNhR2xqYUNCMGFHVWdZMjl0CmJXRnVaSE1nZDJsc2JDQmlaU0JsZUdWamRYUmxaQTBLSkVOMWNuSmxiblJFYVhJZ1BTQWthVzU3SjJRbmZUc05DbU5vYjNBb0pFTjEKY25KbGJuUkVhWElnUFNCZ0pFTnRaRkIzWkdBcElHbG1LQ1JEZFhKeVpXNTBSR2x5SUdWeElDSWlLVHNOQ2cwS0pFeHZaMmRsWkVsdQpJRDBnSkVOdmIydHBaWE43SjFOQlZrVkVVRmRFSjMwZ1pYRWdKRkJoYzNOM2IzSmtPdzBLRFFwcFppZ2tRV04wYVc5dUlHVnhJQ0pzCmIyZHBiaUlnZkh3Z0lTUk1iMmRuWldSSmJpa2dJeUIxYzJWeUlHNWxaV1J6TDJoaGN5QjBieUJzYjJkcGJnMEtldzBLQ1NaUVpYSm0KYjNKdFRHOW5hVzQ3RFFvTkNuME5DbVZzYzJsbUtDUkJZM1JwYjI0Z1pYRWdJbU52YlcxaGJtUWlLU0FqSUhWelpYSWdkMkZ1ZEhNZwpkRzhnY25WdUlHRWdZMjl0YldGdVpBMEtldzBLQ1NaRmVHVmpkWFJsUTI5dGJXRnVaRHNOQ24wTkNtVnNjMmxtS0NSQlkzUnBiMjRnClpYRWdJblZ3Ykc5aFpDSXBJQ01nZFhObGNpQjNZVzUwY3lCMGJ5QjFjR3h2WVdRZ1lTQm1hV3hsRFFwN0RRb0pKbFZ3Ykc5aFpFWnAKYkdVN0RRcDlEUXBsYkhOcFppZ2tRV04wYVc5dUlHVnhJQ0prYjNkdWJHOWhaQ0lwSUNNZ2RYTmxjaUIzWVc1MGN5QjBieUJrYjNkdQpiRzloWkNCaElHWnBiR1VOQ25zTkNna21SRzkzYm14dllXUkdhV3hsT3cwS2ZRMEtaV3h6YVdZb0pFRmpkR2x2YmlCbGNTQWliRzluCmIzVjBJaWtnSXlCMWMyVnlJSGRoYm5SeklIUnZJR3h2WjI5MWRBMEtldzBLQ1NaUVpYSm1iM0p0VEc5bmIzVjBPdzBLZlE9PSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBmb3BlbigiaXpvLmNpbiIsICJ3KyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSA9IGZ3cml0ZSgkZmlsZSwgYmFzZTY0X2RlY29kZSgkY2dpc2hlbGxpem9jaW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNobW9kKCJpem8uY2luIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldGNhdHNoZWxsID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzRFFvZ0lDQWdJQ0IxYzJVZ1UyOWphMlYwT3cwS0lDQWdJQ0FnY0hKcGJuUWdJa1JoZEdFZ1EyaGgKTUhNZ1EyOXVibVZqZENCQ1lXTnJJRUpoWTJ0a2IyOXlYRzVjYmlJN0RRb2dJQ0FnSUNCcFppQW9JU1JCVWtkV1d6QmRLU0I3RFFvZwpJQ0FnSUNBZ0lIQnlhVzUwWmlBaVZYTmhaMlU2SUNRd0lGdEliM04wWFNBOFVHOXlkRDVjYmlJN0RRb2dJQ0FnSUNBZ0lHVjRhWFFvCk1TazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ0lDQndjbWx1ZENBaVd5cGRJRVIxYlhCcGJtY2dRWEpuZFcxbGJuUnpYRzRpT3cwS0lDQWcKSUNBZ0pHaHZjM1FnUFNBa1FWSkhWbHN3WFRzTkNpQWdJQ0FnSUNSd2IzSjBJRDBnT0RBN0RRb2dJQ0FnSUNCcFppQW9KRUZTUjFaYgpNVjBwSUhzTkNpQWdJQ0FnSUNBZ0pIQnZjblFnUFNBa1FWSkhWbHN4WFRzTkNpQWdJQ0FnSUgwTkNpQWdJQ0FnSUhCeWFXNTBJQ0piCktsMGdRMjl1Ym1WamRHbHVaeTR1TGx4dUlqc05DaUFnSUNBZ0lDUndjbTkwYnlBOUlHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW4KS1NCOGZDQmthV1VvSWxWdWEyNXZkMjRnVUhKdmRHOWpiMnhjYmlJcE93MEtJQ0FnSUNBZ2MyOWphMlYwS0ZORlVsWkZVaXdnVUVaZgpTVTVGVkN3Z1UwOURTMTlUVkZKRlFVMHNJQ1J3Y205MGJ5a2dmSHdnWkdsbElDZ2lVMjlqYTJWMElFVnljbTl5WEc0aUtUc05DaUFnCklDQWdJRzE1SUNSMFlYSm5aWFFnUFNCcGJtVjBYMkYwYjI0b0pHaHZjM1FwT3cwS0lDQWdJQ0FnYVdZZ0tDRmpiMjV1WldOMEtGTkYKVWxaRlVpd2djR0ZqYXlBaVUyNUJOSGc0SWl3Z01pd2dKSEJ2Y25Rc0lDUjBZWEpuWlhRcEtTQjdEUW9nSUNBZ0lDQWdJR1JwWlNnaQpWVzVoWW14bElIUnZJRU52Ym01bFkzUmNiaUlwT3cwS0lDQWdJQ0FnZlEwS0lDQWdJQ0FnY0hKcGJuUWdJbHNxWFNCVGNHRjNibWx1Clp5QlRhR1ZzYkZ4dUlqc05DaUFnSUNBZ0lHbG1JQ2doWm05eWF5Z2dLU2tnZXcwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkVsT0xDSSsKSmxORlVsWkZVaUlwT3cwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkU5VlZDd2lQaVpUUlZKV1JWSWlLVHNOQ2lBZ0lDQWdJQ0FnYjNCbApiaWhUVkVSRlVsSXNJajRtVTBWU1ZrVlNJaWs3RFFvZ0lDQWdJQ0FnSUdWNFpXTWdleWN2WW1sdUwzTm9KMzBnSnkxaVlYTm9KeUF1CklDSmNNQ0lnZUNBME93MEtJQ0FnSUNBZ0lDQmxlR2wwS0RBcE93MEtJQ0FnSUNBZ2ZRMEtJQ0FnSUNBZ2NISnBiblFnSWxzcVhTQkUKWVhSaFkyaGxaRnh1WEc0aU93PT0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlID0gZm9wZW4oImRjLnBsIiwgIncrIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlID0gZndyaXRlKCRmaWxlLCBiYXNlNjRfZGVjb2RlKCRuZXRjYXRzaGVsbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2htb2QoImRjLnBsIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGlmcmFtZSBzcmM9Y2dpdGVsbmV0MS9pem8uY2luIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzb0Zvb3RlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpmdW5jdGlvbiBhY3Rpb25sZmlzY2FuKCkgewogICAgICAgIHdzb0hlYWRlcigpOwogICAgICAgIHByaW50ICcKICAgICAgIDxoMz5MRkkgRmlsZSBkdW1wZXIgQnkgRUBHTDMgU1RSIUszUjwvaDM+CiAgICAgCiAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxmaXNjYW4iPgogICAgICAgICAgTEZJIFVSTDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYwIiBuYW1lPSJsZml1cmwiIHZhbHVlPSIiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPiBGaWxlOiA8c2VsZWN0IG5hbWU9InNjYW50eXBlIj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPgogICAgICAgICAgICAgICAgQWNjZXNzIExvZwogICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj4KICAgICAgICAgICAgICAgIGh0dHBkLmNvbmYKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgIAogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+CiAgICAgICAgICAgICAgICBFcnJvciBMb2cKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNCI+CiAgICAgICAgICAgICAgICBwaHAuaW5pCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjUiPgogICAgICAgICAgICAgICAgTXlTUUwKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNiI+CiAgICAgICAgICAgICAgICBGVFAKICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNyI+CiAgICAgICAgICAgICAgICBFbnZpcm9uCiAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PiBOdWxsOiA8c2VsZWN0IG5hbWU9Im51bGwiPgogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJTAwIj4KICAgICAgICAgICAgICAgIFllcwogICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPgogICAgICAgICAgICAgICAgTm8KICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgPC9zZWxlY3Q+IFVzZXItQWdlbnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY3VzdG9tX2hlYWRlciIgdmFsdWU9IiI+CiAgICAgICA8L2Zvcm0+JzsKICAgICAgIGVycm9yX3JlcG9ydGluZygwKTsKICAgICAgICAgIGlmKCRfUE9TVFsnbGZpdXJsJ10pIHsKICAgICAgICAgICAgIHByaW50ICI8cHJlPiI7CiAgICAgICAgICAgICAkY2hlYWRlciA9ICRfUE9TVFsnY3VzdG9tX2hlYWRlciddOwogICAgICAgICAgICAgJHRhcmdldCA9ICRfUE9TVFsnbGZpdXJsJ107CiAgICAgICAgICAgICAkdHlwZSA9ICRfUE9TVFsnc2NhbnR5cGUnXTsKICAgICAgICAgICAgICRieXRlMSA9ICRfUE9TVFsnbnVsbCddOwogICAgICAgICAgICAgJGxmaXRlc3QgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCIuJGJ5dGUxLiIiOwogICAgICAgICAgICAgJGxmaXRlc3QyID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Zha2UvZmlsZSIuJGJ5dGUxLiIiOwogICAgICAgICAgICAgJGxmaXByb2NlbnYgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvYy9lbnZpcm9uIi4kYnl0ZTEuIiI7CiAgICAgICAgICAgICAkbGZpYWNjZXNzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9hY2Nlc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIpOwogICAgICAgICAgIAogICAgICAgICAgICAgJGxmaWVycm9yID0gYXJyYXkoCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvcl9sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9lcnJvcl9sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvci5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9lcnJvcl9sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlMi9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIpOwogICAgIAogICAgICAgICAgICAgJGxmaWNvbmZpZyA9IGFycmF5KAogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBwcy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZi5kZWZhdWx0Ii4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvaHR0cGQuY29uZi5waHAiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2FwYWNoZS92aG9zdHMuY29uZiIuJGJ5dGUxLiIiKTsKICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICRsZmlwaHBpbmkgPSBhcnJheSgKICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9iaW4vcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xpYi9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA0L2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDUvbGliL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0LjQvZmNnaS9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA1L2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvcGhwNC9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vd2ViL2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9aZW5kL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvY2FsL3d3dy9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvY2dpL3BocC5pbmkiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiKTsKICAgICAgICAgICAKICAgICAgICAgICAgICAkbGZpbXlzcWwgPSBhcnJheSgKICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWxkZXJyb3IubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC1zbG93LmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL215c3FsLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xpYi9teXNxbC9teS5jbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9teXNxbC9teS5jbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWxkLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9teS5jbmYiLiRieXRlMS4iIik7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgJGxmaWZ0cCA9IGFycmF5KAogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3Byb2Z0cGQiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3d3dy9sb2dzL3Byb2Z0cGQuc3lzdGVtLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wcm9mdHBkIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm90cGQvcHJvZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdmhjczIvcHJvZnRwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm9mdHBkL21vZHVsZXMuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy92c2Z0cGQubG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNocm9vdF9saXN0Ii4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Nocm9vdFVzZXJzIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy94ZmVybG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2FkbS9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGFjY2VzcyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGhvc3RzIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwdXNlcnMiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3Ivc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9wdXJlZnRwZC9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5wZGIiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDI5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBhc3N3ZCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL2Z0cC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL25ldC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BrZ3NyYy9uZXQvcHVyZWZ0cGQvIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICAzNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL2NvbnRyaWIvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZS1mdHBkL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDM4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3B1cmVmdHBkLmxvZyIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgMzkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwLXByb3h5L2Z0cC1wcm94eS5sb2ciLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cC1wcm94eSIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwbG9nIi4kYnl0ZTEuIiIsCiAgICAgICAgICAgICAgICA0MiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL2Z0cCIuJGJ5dGUxLiIiLAogICAgICAgICAgICAgICAgNDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBjaHJvb3QiLiRieXRlMS4iIiwKICAgICAgICAgICAgICAgIDQ0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvZnRwaG9zdHMiLiRieXRlMS4iIik7CiAgICAgICAgICAgCiAgICAgCiAgICAgICAgICAgICAkeCA9IDE7CiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDEgKSB7CiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOwogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7CiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsKICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOwogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOwogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWFjY2Vzc1skeF0pIHsKICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWFjY2Vzc1skeF0pOwogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iPC9hPjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkeCsrOwogICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSAyICkgewogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsKICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOwogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7CiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgIHdoaWxlKCRsZmljb25maWdbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmljb25maWdbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gMyApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpZXJyb3JbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmllcnJvclskeF0pOwogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkeCsrOwogICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSA0ICkgewogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsKICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOwogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7CiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlwaHBpbmlbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlwaHBpbmlbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gNSApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpbXlzcWxbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlteXNxbFskeF0pOwogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaW15c3FsWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjxiciAgLz4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkeCsrOwogICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSA2ICkgewogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsKICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOwogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7CiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlmdHBbJHhdKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlmdHBbJHhdKTsKICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIjwvYT48YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiI8YnIgIC8+IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHgrKzsKICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgIGlmICggJHR5cGUgPT0gNyApIHsKICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7CiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsKICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOwogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7CiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7ewogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcHJvY2Vudik7CiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgewogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiI8L2E+PGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPGJyICAvPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgd3NvRm9vdGVyKCk7CiAgICB9CiBmdW5jdGlvbiBhY3Rpb25TYWZlTW9kZSgpIHsKICAgICAgICAgICAgJHRlbXA9Jyc7CiAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ3AxJ10pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWydwMiddLCAkdGVtcCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGluaygkdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnU29ycnkuLi4gQ2FuXCd0IG9wZW4gZmlsZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRmaWxlcykgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJGZpbGVuYW1lLiJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIucHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUoJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcig7JF9QT1NUWydwMiddIDw9ICRfUE9TVFsncDMnXTskX1BPU1RbJ3AyJ10rKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdWlkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbignOicsJHVpZCkuIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgICAgIHdzb0hlYWRlcigpOwogICAgICAgICAgICBlY2hvICc8aDE+U2FmZSBtb2RlIGJ5cGFzczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICAgICAgICAgIGVjaG8gJzxzcGFuPkNvcHkgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMSIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkdsb2IgKGxpc3QgZGlyKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIyIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+Q3VybCAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIzIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+SW5pX3Jlc3RvcmUgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNCIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPlBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgaWYoJHRlbXApCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuaHRtbHNwZWNpYWxjaGFycygkdGVtcCkuJzwvcHJlPic7CiAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgICAgIHdzb0Zvb3RlcigpOwogICAgfQpmdW5jdGlvbiBhY3Rpb25QaHAoKSB7CglpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKICAgICAgICBXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIHRydWUpOwoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIgLiBhZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwgIlxuXHJcdFxcJ1wwIikgLiAiJztcbiI7CgkJZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKCQlleGl0OwoJfQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pICYmICFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICAgICAgIFdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4JywgMCk7CgoJd3NvSGVhZGVyKCk7CglpZihpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSkgewoJCWVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAwMDt9PC9zdHlsZT4nOwoJCW9iX3N0YXJ0KCk7CgkJcGhwaW5mbygpOwoJCSR0bXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKGFycmF5ICgKICAgICAgICAgICAgJyEoYm9keXxhOlx3K3xib2R5LCB0ZCwgdGgsIGgxLCBoMikgey4qfSFtc2lVJywKICAgICAgICAgICAgJyF0ZCwgdGggeyguKil9IW1zaVUnLAogICAgICAgICAgICAnITxpbWdbXj5dKz4hbXNpVScsCiAgICAgICAgKSwgYXJyYXkgKAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLAogICAgICAgICAgICAnJwogICAgICAgICksICR0bXApOwoJCWVjaG8gc3RyX3JlcGxhY2UoJzxoMScsJzxoMicsICR0bXApIC4nPC9kaXY+PGJyPic7Cgl9CiAgICBlY2hvICc8aDE+RXhlY3V0aW9uIFBIUC1jb2RlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1wZiBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0iaWYodGhpcy5hamF4LmNoZWNrZWQpe2EoXCdQaHBcJyxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7ZyhcJ1BocFwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpO31yZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT1jb2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nLighZW1wdHkoJF9QT1NUWydwMSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLic8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1FdmFsIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+JzsKCWVjaG8gJyA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7CglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7Cgl9CgllY2hvICc8L3ByZT48L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkgewogICAgaWYgKCFlbXB0eSAoJF9DT09LSUVbJ2YnXSkpCiAgICAgICAgJF9DT09LSUVbJ2YnXSA9IEB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnZiddKTsKICAgIAoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKCQlzd2l0Y2goJF9QT1NUWydwMSddKSB7CgkJCWNhc2UgJ3VwbG9hZEZpbGUnOgoJCQkJaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpCgkJCQkJZWNobyAiQ2FuJ3QgdXBsb2FkISI7CgkJCQlicmVhazsKCQkJY2FzZSAnbWtkaXInOgoJCQkJaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10pKQoJCQkJCWVjaG8gIkNhbid0IGNyZWF0ZSEiOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2RlbGV0ZSc6CgkJCQlmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsKCQkJCQkkcGF0aCA9IChzdWJzdHIoJHBhdGgsLTEpPT0nLycpID8gJHBhdGg6JHBhdGguJy8nOwoJCQkJCSRkaCAgPSBvcGVuZGlyKCRwYXRoKTsKCQkJCQl3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgewoJCQkJCQkkaXRlbSA9ICRwYXRoLiRpdGVtOwoJCQkJCQlpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkkdHlwZSA9IGZpbGV0eXBlKCRpdGVtKTsKCQkJCQkJaWYgKCR0eXBlID09ICJkaXIiKQoJCQkJCQkJZGVsZXRlRGlyKCRpdGVtKTsKCQkJCQkJZWxzZQoJCQkJCQkJQHVubGluaygkaXRlbSk7CgkJCQkJfQoJCQkJCWNsb3NlZGlyKCRkaCk7CgkJCQkJQHJtZGlyKCRwYXRoKTsKCQkJCX0KCQkJCWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCgkJCQkJZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgewogICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgkJCQkJCSRmID0gdXJsZGVjb2RlKCRmKTsKCQkJCQkJaWYoaXNfZGlyKCRmKSkKCQkJCQkJCWRlbGV0ZURpcigkZik7CgkJCQkJCWVsc2UKCQkJCQkJCUB1bmxpbmsoJGYpOwoJCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICdwYXN0ZSc6CgkJCQlpZigkX0NPT0tJRVsnYWN0J10gPT0gJ2NvcHknKSB7CgkJCQkJZnVuY3Rpb24gY29weV9wYXN0ZSgkYywkcywkZCl7CgkJCQkJCWlmKGlzX2RpcigkYy4kcykpewoJCQkJCQkJbWtkaXIoJGQuJHMpOwoJCQkJCQkJJGggPSBAb3BlbmRpcigkYy4kcyk7CgkJCQkJCQl3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpCgkJCQkJCQkJaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpCgkJCQkJCQkJCWNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwoJCQkJCQl9IGVsc2VpZihpc19maWxlKCRjLiRzKSkKCQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7CgkJCQkJfQoJCQkJCWZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikKCQkJCQkJY29weV9wYXN0ZSgkX0NPT0tJRVsnYyddLCRmLCAkR0xPQkFMU1snY3dkJ10pOwoJCQkJfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICdtb3ZlJykgewoJCQkJCWZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpewoJCQkJCQlpZihpc19kaXIoJGMuJHMpKXsKCQkJCQkJCW1rZGlyKCRkLiRzKTsKCQkJCQkJCSRoID0gQG9wZW5kaXIoJGMuJHMpOwoJCQkJCQkJd2hpbGUgKCgkZiA9IEByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQoJCQkJCQkJCWlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKQoJCQkJCQkJCQljb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKCQkJCQkJfSBlbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKQoJCQkJCQkJQGNvcHkoJGMuJHMsICRkLiRzKTsKCQkJCQl9CgkJCQkJZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKQoJCQkJCQlAcmVuYW1lKCRfQ09PS0lFWydjJ10uJGYsICRHTE9CQUxTWydjd2QnXS4kZik7CgkJCQl9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ3ppcCcpIHsKCQkJCQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR6aXAtPm9wZW4oJF9QT1NUWydwMiddLCAxKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9DT09LSUVbJ2MnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfQ09PS0lFWydmJ10gYXMgJGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihAaXNfZmlsZSgkX0NPT0tJRVsnYyddLiRmKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+YWRkRmlsZSgkX0NPT0tJRVsnYyddLiRmLCAkZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKEBpc19kaXIoJF9DT09LSUVbJ2MnXS4kZikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZXJhdG9yID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRmLicvJywgRmlsZXN5c3RlbUl0ZXJhdG9yOjpTS0lQX0RPVFMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+YWRkRmlsZShyZWFscGF0aCgka2V5KSwgJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAndW56aXAnKSB7CgkJCQkJaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHppcC0+b3BlbigkX0NPT0tJRVsnYyddLiRmKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmV4dHJhY3RUbygkR0xPQkFMU1snY3dkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgkJCQl9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ3RhcicpIHsKICAgICAgICAgICAgICAgICAgICBjaGRpcigkX0NPT0tJRVsnYyddKTsKICAgICAgICAgICAgICAgICAgICAkX0NPT0tJRVsnZiddID0gYXJyYXlfbWFwKCdlc2NhcGVzaGVsbGFyZycsICRfQ09PS0lFWydmJ10pOwogICAgICAgICAgICAgICAgICAgIHdzb0V4KCd0YXIgY2Z6diAnIC4gZXNjYXBlc2hlbGxhcmcoJF9QT1NUWydwMiddKSAuICcgJyAuIGltcGxvZGUoJyAnLCAkX0NPT0tJRVsnZiddKSk7CiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ2N3ZCddKTsKCQkJCX0KCQkJCXVuc2V0KCRfQ09PS0lFWydmJ10pOwogICAgICAgICAgICAgICAgc2V0Y29va2llKCdmJywgJycsIHRpbWUoKSAtIDM2MDApOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCQkJCVdTT3NldGNvb2tpZSgnYWN0JywgJF9QT1NUWydwMSddKTsKCQkJCQlXU09zZXRjb29raWUoJ2YnLCBzZXJpYWxpemUoQCRfUE9TVFsnZiddKSk7CgkJCQkJV1NPc2V0Y29va2llKCdjJywgQCRfUE9TVFsnYyddKTsKCQkJCX0KCQkJCWJyZWFrOwoJCX0KCX0KICAgIHdzb0hlYWRlcigpOwoJZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7PC9zY3JpcHQ+JzsKCSRkaXJDb250ZW50ID0gd3NvU2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsKCWlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgewllY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnO3dzb0Zvb3RlcigpOyByZXR1cm47IH0KCWdsb2JhbCAkc29ydDsKCSRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsKCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CgkJaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpCgkJCSRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7Cgl9CmVjaG8gIjxzY3JpcHQ+CglmdW5jdGlvbiBzYSgpIHsKCQlmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQoJCQlpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JykKCQkJCWQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsKCX0KPC9zY3JpcHQ+Cjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+Cjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7CgkkZGlycyA9ICRmaWxlcyA9IGFycmF5KCk7CgkkbiA9IGNvdW50KCRkaXJDb250ZW50KTsKCWZvcigkaT0wOyRpPCRuOyRpKyspIHsKCQkkb3cgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pKTsKCQkkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsKCQkkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwKCQkJCQkgJ3BhdGgnID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sCgkJCQkJICdtb2RpZnknID0+IGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSwKCQkJCQkgJ3Blcm1zJyA9PiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSksCgkJCQkJICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksCgkJCQkJICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLAoJCQkJCSAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKQoJCQkJCSk7CgkJaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkKCQkJJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7CgkJZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpCgkJCSRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOwoJCWVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpCgkJCSRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsKCX0KCSRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsKCWZ1bmN0aW9uIHdzb0NtcCgkYSwgJGIpIHsKCQlpZigkR0xPQkFMU1snc29ydCddWzBdICE9ICdzaXplJykKCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwoJCWVsc2UKCQkJcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKCX0KCXVzb3J0KCRmaWxlcywgIndzb0NtcCIpOwoJdXNvcnQoJGRpcnMsICJ3c29DbXAiKTsKCSRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkZmlsZXMpOwoJJGwgPSAwOwoJZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsKCQllY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJyIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9IicuKCgkZlsndHlwZSddPT0nZmlsZScpPydnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndmlld1wnKSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pOidnKFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyIgJyAuIChlbXB0eSAoJGZbJ2xpbmsnXSkgPyAnJyA6ICJ0aXRsZT0neyRmWydsaW5rJ119JyIpIC4gJz48Yj5bICcgLiBodG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pIC4gJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/d3NvVmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddCgkJCS4nPC90ZD48dGQ+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmlsZScpPycgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPC90ZD48L3RyPic7CgkJJGwgPSAkbD8wOjE7Cgl9CgllY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+Cgk8c2VsZWN0IG5hbWU9J3AxJz48b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsKICAgIGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3ppcCc+Q29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc+VW5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiI7CiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSd0YXInPkNvbXByZXNzICh0YXIuZ3opPC9vcHRpb24+IjsKICAgIGlmKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSkKICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGUgLyBDb21wcmVzczwvb3B0aW9uPiI7CiAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDsiOwogICAgaWYoIWVtcHR5KCRfQ09PS0lFWydhY3QnXSkgJiYgQGNvdW50KCRfQ09PS0lFWydmJ10pICYmICgoJF9DT09LSUVbJ2FjdCddID09ICd6aXAnKSB8fCAoJF9DT09LSUVbJ2FjdCddID09ICd0YXInKSkpCiAgICAgICAgZWNobyAiZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9J3dzb18iIC4gZGF0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJz8nemlwJzondGFyLmd6JykgLiAiJz4mbmJzcDsiOwogICAgZWNobyAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsKCXdzb0Zvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlvblBTeW1saW5rKCkgewoKd3NvSGVhZGVyKCk7CmVjaG8gIiA8IGNlbnRlciA+ICI7ICAgCgoJJHRlbG5ldGZpbGUgPSAndGVsbmV0MjEzJzsgLy8gUGVybCB0b29scyBmaWxlCgkKCSRsaW5rID0gImh0dHA6IC8vd3d3LnRoZS1jb2RlLnRrL3BoaCI7IC8vIFRvb2xzIHNvdXJjZSBsaW5rICh3aXRob3V0IHNsYXNoICcvJyBpbiBlbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcmxmaWxlcyA9IGFycmF5KCIuaHRhY2Nlc3MiLCAidXNlcnMuZ2lmIiwgIml6by5naWYiLCAiY29uZmlnLmdpZiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOyAvLyBSZXR1cm5zIHRyYWlsaW5nIG5hbWUgY29tcG9uZW50IG9mIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVybDAgPSAiaHR0cDovLyRfU0VSVkVSW0hUVFBfSE9TVF0kX1NFUlZFUltSRVFVRVNUX1VSSV0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgiJG5hbWUiLCAnJywgJHVybDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0eWxlIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8aDM+LSBQRVJMIFRPT0xTOjwvaDM+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0ZWxuZXRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbWtkaXIoJHRlbG5ldGZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2htb2QoIiR0ZWxuZXRmaWxlIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkdGVsbmV0ZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBlcmxmaWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRvb2wgPSBmb3BlbigiJHRlbG5ldGZpbGUvJGZpbGUiLCAidysiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAZXJlZ2koJ2h0YWNjZXNzJywgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgiLiIsICcnLCAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9vbGNvbnRlbnRzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIkbGluay9wZXJsLyRmaWxlLnR4dCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlID0gZndyaXRlKCR0b29sLCAkdG9vbGNvbnRlbnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSgkdG9vbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdyaXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBlcmVnaSgnaHRhY2Nlc3MnLCAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSAiLiRmaWxlIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Izk2OTY5Nj5UaGUgPGI+JGZpbGU8L2I+IEZpbGUgV2FzIENyZWF0ZWQgU3VjY2Vzc2Z1bHkuPT0+PGEgaHJlZj0nJHVybC8kdGVsbmV0ZmlsZS8kZmlsZScgdGFyZ2V0PSdfYmxhbmsnPjx1PiRmaWxlPC91PjwvYT48L2ZvbnQ+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5FUlJPUjogQ2Fubm90IENyZWF0ZSA8Yj4kZmlsZTwvYj4gRmlsZSAhISA8L2ZvbnQ+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2htb2QoIiR0ZWxuZXRmaWxlLyRmaWxlIiwgMDc1NSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NvRm9vdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CmZ1bmN0aW9uIGFjdGlvblBvcnRTY2FubmVyKCkgewogICAgd3NvSGVhZGVyKCk7CiAgICBlY2hvICc8aDE+UG9ydCBTY2FubmVyPC9oMT4nOwogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsKICAgIGVjaG8gJzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPic7CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsnaG9zdCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnZW5kJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydzdGFydCddKSl7CiAgICAgICAgJHN0YXJ0ID0gc3RyaXBfdGFncygkX1BPU1RbJ3N0YXJ0J10pOwogICAgICAgICRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnZW5kJ10pOwogICAgICAgICRob3N0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2hvc3QnXSk7CiAgICAgICAgZm9yKCRpID0gJHN0YXJ0OyAkaTw9JGVuZDsgJGkrKyl7CiAgICAgICAgICAgICRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOwogICAgICAgICAgICBpZigkZnApewogICAgICAgICAgICAgICAgZWNobyAnUG9ydCAnLiRpLicgaXMgPGZvbnQgY29sb3I9Z3JlZW4+b3BlbjwvZm9udD48YnI+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmbHVzaCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAnPGJyIC8+PGJyIC8+PGNlbnRlcj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iUG9ydFNjYW5uZXIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9cDE+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaGFyc2V0IiB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4KICAgICAgICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPgogICAgICAgICAgICAgIFBvcnQgc3RhcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzdGFydCIgdmFsdWU9IjAiLz48YnIgLz48YnIgLz4KICAgICAgICAgICAgICBQb3J0IGVuZDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iNTAwMCIvPjxiciAvPjxiciAvPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuUG9ydHMiIC8+CiAgICAgICAgICAgICAgPC9mb3JtPjwvY2VudGVyPjxiciAvPjxiciAvPic7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgd3NvRm9vdGVyKCk7ICAgIAp9CmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgewoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7ZnVuY3Rpb24gYmluaGV4KCRwKSB7cmV0dXJuIGRlY2hleChiaW5kZWMoJHApKTt9fQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmFzY2lpJykpIHtmdW5jdGlvbiBoZXgyYXNjaWkoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0ckxlbigkcCk7JGkrPTIpeyRyLj1jaHIoaGV4ZGVjKCRwWyRpXS4kcFskaSsxXSkpO31yZXR1cm4gJHI7fX0KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2FzY2lpMmhleCcpKSB7ZnVuY3Rpb24gYXNjaWkyaGV4KCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSBzcHJpbnRmKCclMDJYJyxvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319CglpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQoJJHN0cmluZ1Rvb2xzID0gYXJyYXkoCgkJJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywKCQknQmFzZTY0IGRlY29kZScgPT4gJ2Jhc2U2NF9kZWNvZGUnLAoJCSdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywKCQknVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsCgkJJ0Z1bGwgdXJsZW5jb2RlJyA9PiAnZnVsbF91cmxlbmNvZGUnLAoJCSdtZDUgaGFzaCcgPT4gJ21kNScsCgkJJ3NoYTEgaGFzaCcgPT4gJ3NoYTEnLAoJCSdjcnlwdCcgPT4gJ2NyeXB0JywKCQknQ1JDMzInID0+ICdjcmMzMicsCgkJJ0FTQ0lJIHRvIEhFWCcgPT4gJ2FzY2lpMmhleCcsCgkJJ0hFWCB0byBBU0NJSScgPT4gJ2hleDJhc2NpaScsCgkJJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLAoJCSdIRVggdG8gQklOJyA9PiAnaGV4MmJpbicsCgkJJ0RFQyB0byBIRVgnID0+ICdkZWNoZXgnLAoJCSdERUMgdG8gQklOJyA9PiAnZGVjYmluJywKCQknQklOIHRvIEhFWCcgPT4gJ2JpbmhleCcsCgkJJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLAoJCSdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRvbG93ZXInLAoJCSdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLAoJCSdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsCgkJJ1N0cmluZyBsZW5ndGgnID0+ICdzdHJsZW4nLAoJKTsKCWlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgewoJCVdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCcsIHRydWUpOwoJCW9iX3N0YXJ0KCk7CgkJaWYoaW5fYXJyYXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKQoJCQllY2hvICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOwoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOwoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CgkJZXhpdDsKCX0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCgkJV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgMCk7Cgl3c29IZWFkZXIoKTsKCWVjaG8gJzxoMT5TdHJpbmcgY29udmVyc2lvbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwoJZWNobyAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7Cglmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikKCQllY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7CgkJZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7CglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCWlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSllY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOwoJfQoJZWNobyI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCBmaWxlczo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KCQk8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMudGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRhYmxlIGNlbGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc+CgkJCTx0cj48dGQgd2lkdGg9JzElJz5UZXh0OjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0JyBzdHlsZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPgoJCQk8dHI+PHRkPlBhdGg6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2N3ZCcgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KCQkJPHRyPjx0ZD5OYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9JyonIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CgkJCTx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+CgkJCTwvdGFibGU+PC9mb3JtPiI7CgoJZnVuY3Rpb24gd3NvUmVjdXJzaXZlR2xvYigkcGF0aCkgewoJCWlmKHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykKCQkJJHBhdGguPScvJzsKCQkkcGF0aHMgPSBAYXJyYXlfdW5pcXVlKEBhcnJheV9tZXJnZShAZ2xvYigkcGF0aC4kX1BPU1RbJ3AzJ10pLCBAZ2xvYigkcGF0aC4nKicsIEdMT0JfT05MWURJUikpKTsKCQlpZihpc19hcnJheSgkcGF0aHMpJiZAY291bnQoJHBhdGhzKSkgewoJCQlmb3JlYWNoKCRwYXRocyBhcyAkaXRlbSkgewoJCQkJaWYoQGlzX2RpcigkaXRlbSkpewoJCQkJCWlmKCRwYXRoIT0kaXRlbSkKCQkJCQkJd3NvUmVjdXJzaXZlR2xvYigkaXRlbSk7CgkJCQl9IGVsc2UgewoJCQkJCWlmKGVtcHR5KCRfUE9TVFsncDInXSkgfHwgQHN0cnBvcyhmaWxlX2dldF9jb250ZW50cygkaXRlbSksICRfUE9TVFsncDInXSkhPT1mYWxzZSkKCQkJCQkJZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIixudWxsLFwiIi51cmxlbmNvZGUoJGl0ZW0pLiJcIiwgXCJ2aWV3XCIsXCJcIiknPiIuaHRtbHNwZWNpYWxjaGFycygkaXRlbSkuIjwvYT48YnI+IjsKCQkJCX0KCQkJfQoJCX0KCX0KCWlmKEAkX1BPU1RbJ3AzJ10pCgkJd3NvUmVjdXJzaXZlR2xvYigkX1BPU1RbJ2MnXSk7CgllY2hvICI8L2Rpdj48YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KCQk8Zm9ybSBtZXRob2Q9J3Bvc3QnIHRhcmdldD0nX2JsYW5rJyBuYW1lPSdoZic+CgkJCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MjAwcHg7Jz48YnI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FjdCcgdmFsdWU9J2ZpbmQnLz4KCQkJPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2hhc2hjcmFja2luZy5ydScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cHM6Ly9oYXNoY3JhY2tpbmcucnUvaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KCQkJPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2NyYWNrZm9yLm1lJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vY3JhY2tmb3IubWUvaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KCQk8L2Zvcm0+PC9kaXY+IjsKCXdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25GaWxlc1Rvb2xzKCkgewoJaWYoIGlzc2V0KCRfUE9TVFsncDEnXSkgKQoJCSRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOwoJaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgewoJCWlmKEBpc19maWxlKCRfUE9TVFsncDEnXSkgJiYgQGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsKCQkJb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwoJCQloZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIuYmFzZW5hbWUoJF9QT1NUWydwMSddKSk7CgkJCWlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKCQkJCSR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7CgkJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogIiAuICR0eXBlKTsKCQkJfSBlbHNlCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICJyIik7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoIUBmZW9mKCRmcCkpCgkJCQkJZWNobyBAZnJlYWQoJGZwLCAxMDI0KTsKCQkJCWZjbG9zZSgkZnApOwoJCQl9CgkJfWV4aXQ7Cgl9CglpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsKCQlpZighZmlsZV9leGlzdHMoJF9QT1NUWydwMSddKSkgewoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOwoJCQlpZigkZnApIHsKCQkJCSRfUE9TVFsncDInXSA9ICJlZGl0IjsKCQkJCWZjbG9zZSgkZnApOwoJCQl9CgkJfQoJfQoJd3NvSGVhZGVyKCk7CgllY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewoJCWVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7CgkJd3NvRm9vdGVyKCk7CgkJcmV0dXJuOwoJfQoJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwoJaWYoISR1aWQpIHsKCQkkdWlkWyduYW1lJ10gPSBAZmlsZW93bmVyKCRfUE9TVFsncDEnXSk7CgkJJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pOwoJfSBlbHNlICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pKTsKCWVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2ZpbGUoJF9QT1NUWydwMSddKT93c29WaWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKTonLScpLicgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICcud3NvUGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsKCWVjaG8gJzxzcGFuPkNoYW5nZSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+QWNjZXNzIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlYXRpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5Nb2RpZnkgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nPGJyPjxicj4nOwoJaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKQoJCSRfUE9TVFsncDInXSA9ICd2aWV3JzsKCWlmKCBpc19maWxlKCRfUE9TVFsncDEnXSkgKQoJCSRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKCWVsc2UKCQkkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKCWZvcmVhY2goJG0gYXMgJHYpCgkJZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLFwnJy5zdHJ0b2xvd2VyKCR2KS4nXCcpIj4nLigoc3RydG9sb3dlcigkdik9PUAkX1BPU1RbJ3AyJ10pPyc8Yj5bICcuJHYuJyBdPC9iPic6JHYpLic8L2E+ICc7CgllY2hvICc8YnI+PGJyPic7Cglzd2l0Y2goJF9QT1NUWydwMiddKSB7CgkJY2FzZSAndmlldyc6CgkJCWVjaG8gJzxwcmUgY2xhc3M9bWwxPic7CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoICFAZmVvZigkZnApICkKCQkJCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwoJCQkJQGZjbG9zZSgkZnApOwoJCQl9CgkJCWVjaG8gJzwvcHJlPic7CgkJCWJyZWFrOwoJCWNhc2UgJ2hpZ2hsaWdodCc6CgkJCWlmKCBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsKCQkJCWVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtjb2xvcjpibGFjazsiPic7CgkJCQkkY29kZSA9IEBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7CgkJCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJGNvZGUpLic8L2Rpdj4nOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgJ2NobW9kJzoKCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewoJCQkJJHBlcm1zID0gMDsKCQkJCWZvcigkaT1zdHJsZW4oJF9QT1NUWydwMyddKS0xOyRpPj0wOy0tJGkpCgkJCQkJJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsKCQkJCWlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQoJCQkJCWVjaG8gJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKCQkJfQoJCQljbGVhcnN0YXRjYWNoZSgpOwoJCQllY2hvICc8c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRfUE9TVFsncDEnXSkgLiAnXCcsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAnZWRpdCc6CgkJCWlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgewoJCQkJZWNobyAnRmlsZSBpc25cJ3Qgd3JpdGVhYmxlJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCSR0aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pOwoJCQkJJF9QT1NUWydwMyddID0gc3Vic3RyKCRfUE9TVFsncDMnXSwxKTsKCQkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInciKTsKCQkJCWlmKCRmcCkgewoJCQkJCUBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7CgkJCQkJQGZjbG9zZSgkZnApOwoJCQkJCWVjaG8gJ1NhdmVkITxicj48c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD4nOwoJCQkJCUB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOwoJCQkJfQoJCQl9CgkJCWVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoICFAZmVvZigkZnApICkKCQkJCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwoJCQkJQGZjbG9zZSgkZnApOwoJCQl9CgkJCWVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CgkJCWJyZWFrOwoJCWNhc2UgJ2hleGR1bXAnOgoJCQkkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOwoJCQkkbiA9IDA7CgkJCSRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwoJCQkkbGVuID0gc3RybGVuKCRjKTsKCQkJZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7CgkJCQkkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOwoJCQkJc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7CgkJCQkJY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsKCQkJCQljYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwoJCQkJCWNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7CgkJCQkJY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsKCQkJCQlkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOwoJCQkJfQoJCQkJJG4rKzsKCQkJCWlmICgkbiA9PSAzMikgewoJCQkJCSRuID0gMDsKCQkJCQlpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQoJCQkJCSRoWzFdIC49ICc8YnI+JzsKCQkJCQkkaFsyXSAuPSAiXG4iOwoJCQkJfQoJCSAJfQoJCQllY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9IzIyMjIyMj48dHI+PHRkIGJnY29sb3I9IzMzMzMzMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7CgkJCWJyZWFrOwoJCWNhc2UgJ3JlbmFtZSc6CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCWlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkKCQkJCQllY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nOwoJCQkJZWxzZQoJCQkJCWRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJy51cmxlbmNvZGUoJF9QT1NUWydwMyddKS4nIixudWxsLCIiKTwvc2NyaXB0PicpOwoJCQl9CgkJCWVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwoJCQlicmVhazsKCQljYXNlICd0b3VjaCc6CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCSR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7CgkJCQlpZigkdGltZSkgewoJCQkJCWlmKCF0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKQoJCQkJCQllY2hvICdGYWlsISc7CgkJCQkJZWxzZQoJCQkJCQllY2hvICdUb3VjaGVkISc7CgkJCQl9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7CgkJCX0KCQkJY2xlYXJzdGF0Y2FjaGUoKTsKCQkJZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJlYWs7Cgl9CgllY2hvICc8L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkNvbnNvbGUoKSB7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgewogICAgICAgIFdTT3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCcsIHRydWUpOwogICAgICAgICRfUE9TVFsncDEnXSAuPSAnIDI+JjEnOwogICAgfSBlbHNlaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpCiAgICAgICAgV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0JywgMCk7CgoJaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7CgkJV1NPc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgdHJ1ZSk7CgkJb2Jfc3RhcnQoKTsKCQllY2hvICJkLmNmLmNtZC52YWx1ZT0nJztcbiI7CgkJJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi53c29FeCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsKCQlpZihwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpCXsKCQkJaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsKCQkJCSRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsKCQkJCWVjaG8gImNfPSciLiRHTE9CQUxTWydjd2QnXS4iJzsiOwoJCQl9CgkJfQoJCWVjaG8gImQuY2Yub3V0cHV0LnZhbHVlKz0nIi4kdGVtcC4iJzsiOwoJCWVjaG8gImQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOwoJCSR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7CgkJZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKCQlleGl0OwoJfQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKCQlXU09zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsKCXdzb0hlYWRlcigpOwogICAgZWNobyAiPHNjcmlwdD4KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsKdmFyIGNtZHMgPSBuZXcgQXJyYXkoJycpOwp2YXIgY3VyID0gMDsKZnVuY3Rpb24ga3AoZSkgewoJdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBlLmtleUNvZGU7CglpZihuID09IDM4KSB7CgkJY3VyLS07CgkJaWYoY3VyPj0wKQoJCQlkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CgkJZWxzZQoJCQljdXIrKzsKCX0gZWxzZSBpZihuID09IDQwKSB7CgkJY3VyKys7CgkJaWYoY3VyIDwgY21kcy5sZW5ndGgpCgkJCWRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKCQllbHNlCgkJCWN1ci0tOwoJfQp9CmZ1bmN0aW9uIGFkZChjbWQpIHsKCWNtZHMucG9wKCk7CgljbWRzLnB1c2goY21kKTsKCWNtZHMucHVzaCgnJyk7CgljdXIgPSBjbWRzLmxlbmd0aC0xOwp9Cjwvc2NyaXB0PiI7CgllY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2QuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO30gcmV0dXJuIGZhbHNlOyI+PHNlbGVjdCBuYW1lPWFsaWFzPic7Cglmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsKCQlpZigkdiA9PSAnJykgewoJCQllY2hvICc8b3B0Z3JvdXAgbGFiZWw9Ii0nLmh0bWxzcGVjaWFsY2hhcnMoJG4pLictIj48L29wdGdyb3VwPic7CgkJCWNvbnRpbnVlOwoJCX0KCQllY2hvICc8b3B0aW9uIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiciPicuJG4uJzwvb3B0aW9uPic7Cgl9CgkKCWVjaG8gJzwvc2VsZWN0PjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZC5jZi5hbGlhcy52YWx1ZSk7aWYoZC5jZi5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fWVsc2V7ZyhudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9IiB2YWx1ZT0iPj4iPiA8bm9icj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLihAJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWCA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXNob3dfZXJyb3JzIHZhbHVlPTEgJy4oIWVtcHR5KCRfUE9TVFsncDInXSl8fCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10/J2NoZWNrZWQnOicnKS4nPiByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICgyPiYxKTwvbm9icj48YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luOjA7IiByZWFkb25seT4nOwoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMoIiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi53c29FeCgkX1BPU1RbJ3AxJ10pKTsKCX0KCWVjaG8gJzwvdGV4dGFyZWE+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNkZjU7YmFja2dyb3VuZC1jb2xvcjpncmVlbjtib3JkZXItdG9wOjBweDsiIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7IiBvbmtleWRvd249ImtwKGV2ZW50KTsiPjwvdGQ+PC90cj48L3RhYmxlPic7CgllY2hvICc8L2Zvcm0+PC9kaXY+PHNjcmlwdD5kLmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7Cgl3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxib2R5IGJnY29sb3I9IzAwMDAwMD48Y2VudGVyPjxpbWcgc3JjPSJodHRwOi8vczMwLnBvc3RpbWcub3JnL3AzdDN2NmwycC9sb2cuanBnIj48L2NlbnRlcj48L2JvZHk+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7CgoJaWYoJF9QT1NUWydwMSddID09ICd5ZXMnKQoJCWlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpCgkJCWRpZSgnU2hlbGwgcmVtb3ZlZCcpOwoJCWVsc2UKCQkJZWNobyAndW5saW5rIGVycm9yISc7CiAgICBpZigkX1BPU1RbJ3AxJ10gIT0gJ3llcycpCiAgICAgICAgd3NvSGVhZGVyKCk7CgllY2hvICc8aDE+U3VpY2lkZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PnJlbW92ZSB0aGUgc2hlbGw/PGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI+WWVzPC9hPjwvZGl2Pic7Cgl3c29Gb290ZXIoKTsKfQogICAgICAkX1FsaU84PSJceDZkYWlcMTU0IjskX1FsaW90PSRfU0VSVkVSWyJceDUzXHg0NVJWRVwxMjJfXHg0ZUFNXHg0NSJdLiRfU0VSVkVSWyJcMTIzXDEwM1x4NTJJXHg1MFx4NTRfXDExNlwxMDFcMTE1RSJdOyRfUWxMMWk9IlwxNDFyXDE2MmFcMTcxXDA0MCIuJF9RbGlvdDskX1FsTGlvPWFycmF5KCJcMTQzXHg2MSIsIlx4NmNceDY5IiwiXDE0Nlx4NzdcMTYyXDE1MVx4NzRceDY1IiwiXDEwMCIsInZceDY1XHgyZSIpOyRfUWxsMEk9JF9RbExpb1syXS4kX1FsTGlvWzNdLiRfUWxMaW9bMV0uJF9RbExpb1s0XS4kX1FsTGlvWzBdOyRfUWxsakM9QCRfUWxpTzgoJF9RbGwwSSwkX1FsTDFpLCRfUWxpb3QpOwpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgewoJd3NvSGVhZGVyKCk7CglpZiggaXNzZXQoJF9QT1NUWydwcm90byddKSApIHsKCQllY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NlcnZlciddKS4nPGJyPic7CgkJaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnZnRwJyApIHsKCQkJZnVuY3Rpb24gd3NvQnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7CgkJCQkkZnAgPSBAZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7CgkJCQlpZighJGZwKSByZXR1cm4gZmFsc2U7CgkJCQkkcmVzID0gQGZ0cF9sb2dpbigkZnAsICRsb2dpbiwgJHBhc3MpOwoJCQkJQGZ0cF9jbG9zZSgkZnApOwoJCQkJcmV0dXJuICRyZXM7CgkJCX0KCQl9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7CgkJCWZ1bmN0aW9uIHdzb0JydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgewoJCQkJJHJlcyA9IEBteXNxbF9jb25uZWN0KCRpcC4nOicuKCRwb3J0PyRwb3J0OjMzMDYpLCAkbG9naW4sICRwYXNzKTsKCQkJCUBteXNxbF9jbG9zZSgkcmVzKTsKCQkJCXJldHVybiAkcmVzOwoJCQl9CgkJfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgewoJCQlmdW5jdGlvbiB3c29CcnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsKCQkJCSRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9cG9zdGdyZXMiOwoJCQkJJHJlcyA9IEBwZ19jb25uZWN0KCRzdHIpOwoJCQkJQHBnX2Nsb3NlKCRyZXMpOwoJCQkJcmV0dXJuICRyZXM7CgkJCX0KCQl9CgkJJHN1Y2Nlc3MgPSAwOwoJCSRhdHRlbXB0cyA9IDA7CgkJJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsKCQlpZigkX1BPU1RbJ3R5cGUnXSA9PSAxKSB7CgkJCSR0ZW1wID0gQGZpbGUoJy9ldGMvcGFzc3dkJyk7CgkJCWlmKCBpc19hcnJheSgkdGVtcCkgKQoJCQkJZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgewoJCQkJCSRsaW5lID0gZXhwbG9kZSgiOiIsICRsaW5lKTsKCQkJCQkrKyRhdHRlbXB0czsKCQkJCQlpZiggd3NvQnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICRsaW5lWzBdKSApIHsKCQkJCQkJJHN1Y2Nlc3MrKzsKCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8YnI+JzsKCQkJCQl9CgkJCQkJaWYoQCRfUE9TVFsncmV2ZXJzZSddKSB7CgkJCQkJCSR0bXAgPSAiIjsKCQkJCQkJZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk+PTA7IC0tJGkpCgkJCQkJCQkkdG1wIC49ICRsaW5lWzBdWyRpXTsKCQkJCQkJKyskYXR0ZW1wdHM7CgkJCQkJCWlmKCB3c29CcnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJHRtcCkgKSB7CgkJCQkJCQkkc3VjY2VzcysrOwoJCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJfSBlbHNlaWYoJF9QT1NUWyd0eXBlJ10gPT0gMikgewoJCQkkdGVtcCA9IEBmaWxlKCRfUE9TVFsnZGljdCddKTsKCQkJaWYoIGlzX2FycmF5KCR0ZW1wKSApCgkJCQlmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7CgkJCQkJJGxpbmUgPSB0cmltKCRsaW5lKTsKCQkJCQkrKyRhdHRlbXB0czsKCQkJCQlpZiggd3NvQnJ1dGVGb3JjZSgkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSApIHsKCQkJCQkJJHN1Y2Nlc3MrKzsKCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7CgkJCQkJfQoJCQkJfQoJCX0KCQllY2hvICI8c3Bhbj5BdHRlbXB0czo8L3NwYW4+ICRhdHRlbXB0cyA8c3Bhbj5TdWNjZXNzOjwvc3Bhbj4gJHN1Y2Nlc3M8L2Rpdj48YnI+IjsKCX0KCWVjaG8gJzxoMT5CcnV0ZWZvcmNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHRhYmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ+PHNwYW4+VHlwZTwvc3Bhbj48L3RkPicKCQkuJzx0ZD48c2VsZWN0IG5hbWU9cHJvdG8+PG9wdGlvbiB2YWx1ZT1mdHA+RlRQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1teXNxbD5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9cGdzcWw+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPicKCQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPicKCQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI+JwoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY2hhcnNldCddKS4nIj4nCgkJLic8c3Bhbj5TZXJ2ZXI6cG9ydDwvc3Bhbj48L3RkPicKCQkuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c2VydmVyIHZhbHVlPSIxMjcuMC4wLjEiPjwvdGQ+PC90cj4nCgkJLic8dHI+PHRkPjxzcGFuPkJydXRlIHR5cGU8L3NwYW4+PC90ZD4nCgkJLic8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMSIgY2hlY2tlZD4gL2V0Yy9wYXNzd2Q8L2xhYmVsPjwvdGQ+PC90cj4nCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwvbGFiZWw+PC90ZD48L3RyPicKCQkuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMiI+IERpY3Rpb25hcnk8L2xhYmVsPjwvdGQ+PC90cj4nCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjx0YWJsZSBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjx0cj48dGQ+PHNwYW4+TG9naW48L3NwYW4+PC90ZD4nCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWxvZ2luIHZhbHVlPSJyb290Ij48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48c3Bhbj5EaWN0aW9uYXJ5PC9zcGFuPjwvdGQ+JwoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kaWN0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4ncGFzc3dkLmRpYyI+PC90ZD48L3RyPjwvdGFibGU+JwoJCS4nPC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPic7CgllY2hvICc8L2Rpdj48YnI+JzsKCXdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7CgljbGFzcyBEYkNsYXNzIHsKCQl2YXIgJHR5cGU7CgkJdmFyICRsaW5rOwoJCXZhciAkcmVzOwoJCWZ1bmN0aW9uIERiQ2xhc3MoJHR5cGUpCXsKCQkJJHRoaXMtPnR5cGUgPSAkdHlwZTsKCQl9CgkJZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQkkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7CgkJCQkJaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOwoJCQkJCWlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCWlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBxdWVyeSgkc3RyKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkgewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gZmV0Y2goKSB7CgkJCSRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcyk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsKCQkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIGxpc3REYnMoKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0aXN0ZW1wbGF0ZSE9J3QnIik7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZyciKTsKCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gZXJyb3IoKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiBAbXlzcWxfZXJyb3IoKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCXJldHVybiBAcGdfbGFzdF9lcnJvcigpOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKQoJCQkJCQlyZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsKCQkJCQllbHNlCgkJCQkJCSR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gbG9hZEZpbGUoJHN0cikgewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPmZldGNoKCR0aGlzLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRzdHIpLiInKSBhcyBmaWxlIikpOwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgd3NvMihmaWxlIHRleHQpO0NPUFkgd3NvMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0cikuIic7c2VsZWN0IGZpbGUgZnJvbSB3c28yOyIpOwoJCQkJCSRyPWFycmF5KCk7CgkJCQkJd2hpbGUoJGk9JHRoaXMtPmZldGNoKCkpCgkJCQkJCSRyW10gPSAkaVsnZmlsZSddOwoJCQkJCSR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSB3c28yJyk7CgkJCQkJcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9kZSgiXG4iLCRyKSk7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQkkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsKCQkJCQkkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7CgkJCQkJJHNxbCA9ICRjcmVhdGVbMV0uIjtcbiI7CiAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOwoJCQkJCSR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsKICAgICAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOwoJCQkJCXdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkaSAlIDEwMDAgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICI7XG5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgkJCQkJCSRjb2x1bW5zID0gYXJyYXkoKTsKCQkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2ID09PSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICJOVUxMIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihpc19pbnQoJHYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICR2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7CgkJCQkJCQkkY29sdW1uc1tdID0gImAiLiRrLiJgIjsKCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICBpZigkaGVhZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLiIpIFZBTFVFUyBcblx0KCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICJcblx0LCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOwogICAgICAgICAgICAgICAgICAgICAgICAkaSsrOwoJCQkJCX0KICAgICAgICAgICAgICAgICAgICBpZighJGhlYWQpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCSR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7CgkJCQkJd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgewoJCQkJCQkkY29sdW1ucyA9IGFycmF5KCk7CgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7CgkJCQkJCQkkaXRlbVska10gPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOwoJCQkJCQkJJGNvbHVtbnNbXSA9ICRrOwoJCQkJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyk7Jy4iXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7CgkJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX07CgkkZGIgPSBuZXcgRGJDbGFzcygkX1BPU1RbJ3R5cGUnXSk7CglpZigoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgJiYgKEAkX1BPU1RbJ3AxJ10hPSdzZWxlY3QnKSkgewoJCSRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKTsKCQkkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7CiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7CiAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZihlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHsKICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7CiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7CiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikKCQkJCSRkYi0+ZHVtcCgkdik7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfSBlbHNlaWYoJGZwID0gQGZvcGVuKCRfUE9TVFsnZmlsZSddLCAndycpKSB7CiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikKICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdiwgJGZwKTsKICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5hbGVydCgiRXJyb3IhIENhblwndCBvcGVuIGZpbGUiKTt3aW5kb3cuaGlzdG9yeS5iYWNrKC0xKTwvc2NyaXB0PicpOwoJfQoJd3NvSGVhZGVyKCk7CgllY2hvICIKPGgxPlNxbCBicm93c2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+Cjxmb3JtIG5hbWU9J3NmJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdmcyh0aGlzKTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj4KPHRkPlR5cGU8L3RkPjx0ZD5Ib3N0PC90ZD48dGQ+TG9naW48L3RkPjx0ZD5QYXNzd29yZDwvdGQ+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PC90ZD48L3RyPjx0cj4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9J3F1ZXJ5Jz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMiB2YWx1ZT0nJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4iJz4KPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7CiAgICBpZihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpZWNobyAnc2VsZWN0ZWQnOwplY2hvICI+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdwZ3NxbCcgIjsKaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsKZWNobyAiPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIlwiPjwvdGQ+Cjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPydyb290JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAuIlwiPjwvdGQ+Cjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX3Bhc3MgdmFsdWU9XCIiLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3MnXSkpIC4iXCI+PC90ZD48dGQ+IjsKCSR0bXAgPSAiPGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9iYXNlIHZhbHVlPScnPiI7CglpZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsKCQlpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsKCQkJc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7CgkJCQljYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsKCQkJCWNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOwoJCQkJY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsKCQkJCWNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7CgkJCQljYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7CgkJCX0KCQkJJGRiLT5saXN0RGJzKCk7CgkJCWVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7CgkJCXdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7CgkJCQlsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKCQkJCWVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7CgkJCX0KCQkJZWNobyAnPC9zZWxlY3Q+JzsKCQl9CgkJZWxzZSBlY2hvICR0bXA7Cgl9ZWxzZQoJCWVjaG8gJHRtcDsKCWVjaG8gIjwvdGQ+CgkJCQk8dGQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Picgb25jbGljaz0nZnMoZC5zZik7Jz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3FsX2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hlY2tlZCcpIC4gIj4gY291bnQgdGhlIG51bWJlciBvZiByb3dzPC90ZD4KCQkJPC90cj4KCQk8L3RhYmxlPgoJCTxzY3JpcHQ+CiAgICAgICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsKICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgewogICAgICAgICAgICAgICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7fTsKICAgICAgICAgICAgICAgICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOwogICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7CiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMykgZi5wMy52YWx1ZT0nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCQlmdW5jdGlvbiBzdCh0LGwpIHsKCQkJCWQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsKCQkJCWQuc2YucDIudmFsdWUgPSB0OwogICAgICAgICAgICAgICAgaWYobCAmJiBkLnNmLnAzKSBkLnNmLnAzLnZhbHVlID0gbDsKCQkJCWQuc2Yuc3VibWl0KCk7CgkJCX0KCQkJZnVuY3Rpb24gaXMoKSB7CgkJCQlmb3IoaT0wO2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQoJCQkJCWQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7CgkJCX0KCQk8L3NjcmlwdD4iOwoJaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspewoJCWVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7CgkJCWlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsKCQkJCSRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgZ3JlZW47Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsKCQkJCSR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOwoJCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3JlcykpIHsKCQkJCQlsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7CgkJCQkJJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpOwoJCQkJCWVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJywxKVwiPiIuJHZhbHVlLiI8L2E+IiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJm5ic3A7JzoiIDxzbWFsbD4oeyRuWyduJ119KTwvc21hbGw+IikgLiAiPC9ub2JyPjxicj4iOwoJCQkJfQoJCQkJZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIudmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PGJyPkZpbGUgcGF0aDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSB2YWx1ZT0nZHVtcC5zcWwnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCBncmVlbjsnPiI7CgkJCQlpZihAJF9QT1NUWydwMSddID09ICdzZWxlY3QnKSB7CgkJCQkJJF9QT1NUWydwMSddID0gJ3F1ZXJ5JzsKICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSAkX1BPU1RbJ3AzJ10/JF9QT1NUWydwMyddOjE7CgkJCQkJJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnIC4gJF9QT1NUWydwMiddKTsKCQkJCQkkbnVtID0gJGRiLT5mZXRjaCgpOwoJCQkJCSRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gMzApOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+ZC5zZi5vbnN1Ym1pdD1mdW5jdGlvbigpe3N0KFwiIiAuICRfUE9TVFsncDInXSAuICJcIiwgZC5zZi5wMy52YWx1ZSl9PC9zY3JpcHQ+PHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKHskbnVtWyduJ119IHJlY29yZHMpIFBhZ2UgIyA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3AzJyB2YWx1ZT0iIC4gKChpbnQpJF9QT1NUWydwMyddKSAuICI+IjsKICAgICAgICAgICAgICAgICAgICBlY2hvICIgb2YgJHBhZ2VzIjsKICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPiAxKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXS0xKSAuICIpJz4mbHQ7IFByZXY8L2E+IjsKICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddKzEpIC4gIiknPk5leHQgJmd0OzwvYT4iOwogICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXS0tOwoJCQkJCWlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQoJCQkJCQkkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSAnLiRfUE9TVFsncDInXS4nIExJTUlUIDMwIE9GRlNFVCAnLigkX1BPU1RbJ3AzJ10qMzApOwoJCQkJCWVsc2UKCQkJCQkJJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydwMiddLidgIExJTUlUICcuKCRfUE9TVFsncDMnXSozMCkuJywzMCc7CgkJCQkJZWNobyAiPGJyPjxicj4iOwoJCQkJfQoJCQkJaWYoKEAkX1BPU1RbJ3AxJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsKCQkJCQkkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOwoJCQkJCWlmKCRkYi0+cmVzICE9PSBmYWxzZSkgewoJCQkJCQkkdGl0bGUgPSBmYWxzZTsKCQkJCQkJZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6Z3JlZW4iPic7CgkJCQkJCSRsaW5lID0gMTsKCQkJCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpCXsKCQkJCQkJCWlmKCEkdGl0bGUpCXsKCQkJCQkJCQllY2hvICc8dHI+JzsKCQkJCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKQoJCQkJCQkJCQllY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7CgkJCQkJCQkJcmVzZXQoJGl0ZW0pOwoJCQkJCQkJCSR0aXRsZT10cnVlOwoJCQkJCQkJCWVjaG8gJzwvdHI+PHRyPic7CgkJCQkJCQkJJGxpbmUgPSAyOwoJCQkJCQkJfQoJCQkJCQkJZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOwoJCQkJCQkJJGxpbmUgPSAkbGluZT09MT8yOjE7CgkJCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkJCQkJaWYoJHZhbHVlID09IG51bGwpCgkJCQkJCQkJCWVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsKCQkJCQkJCQllbHNlCgkJCQkJCQkJCWVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsKCQkJCQkJCX0KCQkJCQkJCWVjaG8gJzwvdHI+JzsKCQkJCQkJfQoJCQkJCQllY2hvICc8L3RhYmxlPic7CgkJCQkJfSBlbHNlIHsKCQkJCQkJZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOwoJCQkJCX0KCQkJCX0KCQkJCWVjaG8gIjxicj48L2Zvcm0+PGZvcm0gb25zdWJtaXQ9J2Quc2YucDEudmFsdWU9XCJxdWVyeVwiO2Quc2YucDIudmFsdWU9dGhpcy5xdWVyeS52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48dGV4dGFyZWEgbmFtZT0ncXVlcnknIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+IjsKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOwoJCQkJZWNobyAiPC90ZD48L3RyPiI7CgkJCX0KCQkJZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz4iOwogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgewogICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgiU0VMRUNUIDEgRlJPTSBteXNxbC51c2VyIFdIRVJFIGNvbmNhdChgdXNlcmAsICdAJywgYGhvc3RgKSA9IFVTRVIoKSBBTkQgYEZpbGVfcHJpdmAgPSAneSciKTsKICAgICAgICAgICAgICAgIGlmKCRkYi0+ZmV0Y2goKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7CiAgICAgICAgICAgIH0KCQkJaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7CgkJCQkkZmlsZSA9ICRkYi0+bG9hZEZpbGUoJF9QT1NUWydwMiddKTsKCQkJCWVjaG8gJzxici8+PHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOwoJCQl9Cgl9IGVsc2UgewogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpOwogICAgfQoJZWNobyAnPC9kaXY+JzsKCXdzb0Zvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlvbk5ldHdvcmsoKSB7Cgl3c29IZWFkZXIoKTsKCSRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOwoJJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOwoJZWNobyAiPGgxPkJhY2stQ29ubmVjdCB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPgoJPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2ggW3BlcmxdPC9zcGFuPjxici8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+Cgk8L2Zvcm0+Cgk8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3QgIFtwZXJsXTwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+Cgk8L2Zvcm0+PGJyPiI7CglpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CgkJZnVuY3Rpb24gY2YoJGYsJHQpIHsKCQkJJHcgPSBAZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOwoJCQlpZigkdyl7CgkJCQlAZndyaXRlKCR3LEBiYXNlNjRfZGVjb2RlKCR0KSk7CgkJCQlAZmNsb3NlKCR3KTsKCQkJfQoJCX0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwcCcpIHsKCQkJY2YoIi90bXAvYnAucGwiLCRiaW5kX3BvcnRfcCk7CgkJCSRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKDEpOwoJCQllY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLndzb0V4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiL3RtcC9icC5wbCIpOwoJCX0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsKCQkJY2YoIi90bXAvYmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7CgkJCSRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsKICAgICAgICAgICAgc2xlZXAoMSk7CgkJCWVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIud3NvRXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsKICAgICAgICAgICAgdW5saW5rKCIvdG1wL2JjLnBsIik7CgkJfQoJfQoJZWNobyAnPC9kaXY+JzsKCXdzb0Zvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlvblJDKCkgewoJaWYoIUAkX1BPU1RbJ3AxJ10pIHsKCQkkYSA9IGFycmF5KAoJCQkidW5hbWUiID0+IHBocF91bmFtZSgpLAoJCQkicGhwX3ZlcnNpb24iID0+IHBocHZlcnNpb24oKSwKCQkJIndzb192ZXJzaW9uIiA9PiBXU09fVkVSU0lPTiwKCQkJInNhZmVtb2RlIiA9PiBAaW5pX2dldCgnc2FmZV9tb2RlJykKCQkpOwoJCWVjaG8gc2VyaWFsaXplKCRhKTsKCX0gZWxzZSB7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJfQp9CmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKQoJaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24pKQoJCSRfUE9TVFsnYSddID0gJGRlZmF1bHRfYWN0aW9uOwoJZWxzZQoJCSRfUE9TVFsnYSddID0gJ1NlY0luZm8nOwppZiggIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkgKQoJY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7CmV4aXQ7Cg==")); ?>