Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PD9waHAKJHNoX2lkID0gIlcrS2NuVjBnTGk5S1lYTXdibG8yTmpZZ1crS2NuVjA9IjsKJHNoX3ZlciA9ICIgLSBwcml2OCBzaGVsbCI7CiRzaF9uYW1lID0gIkZhbGNvbi1HMjEiOwokc2hfbWFpbnVybCA9ICJodHRwOi8vbXJsb3ZlcjIxLm9yZy8iOwokaHRtbF9zdGFydCA9ICcnLgonPGh0bWw+PGhlYWQ+Cjx0aXRsZT4nLiRzaF9uYW1lLicgLSAnLmdldGVudigiSFRUUF9IT1NUIikuJzwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CjwhLS0KYm9keSx0YWJsZSB7IGZvbnQtZmFtaWx5OnZlcmRhbmE7Zm9udC1zaXplOjExcHg7Y29sb3I6cmVkO2JhY2tncm91bmQtY29sb3I6YmxhY2s7IH0KdGFibGUgeyB3aWR0aDoxMDAlOyB9CnRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCBibGFjazttYXJnaW4tdG9wOjI7bWFyZ2luLWJvdHRvbToyO3BhZGRpbmc6NXB4OyB9CmEgeyBjb2xvcjpsaWdodGJsdWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KYTphY3RpdmUgeyBjb2xvcjojMDBGRjAwOyB9CmE6bGluayB7IGNvbG9yOiM1QjVCRkY7IH0KYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0KYTp2aXNpdGVkIHsgY29sb3I6Izk5Q0NGRjsgfQppbnB1dCxzZWxlY3Qsb3B0aW9uIHsgZm9udDo4cHQgdGFob21hO2NvbG9yOnJlZDttYXJnaW46Mjtib3JkZXI6MXB4IHNvbGlkIGxpbWU7IH0KdGV4dGFyZWEgeyBjb2xvcjpyZWQ7Zm9udDp2ZXJkYW5hIGJvbGQ7Ym9yZGVyOjFweCBzb2xpZCByZWQ7bWFyZ2luOjI7IH0KLmZsZWZ0IHsgZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmxlZnQ7IH0KLmZyaWdodCB7IGZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7IH0KI3BhZ2ViYXIgeyBmb250OjhwdCB0YWhvbWE7cGFkZGluZzo1cHg7IGJvcmRlcjozcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgfQojcGFnZWJhciB0ZCB7IHZlcnRpY2FsLWFsaWduOnRvcDsgfQojcGFnZWJhciBwIHsgZm9udDo4cHQgdGFob21hO30KI3BhZ2ViYXIgYSB7IGZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzAwRkYwMDsgfQojcGFnZWJhciBhOnZpc2l0ZWQgeyBjb2xvcjojMDBDRTAwOyB9CiNtYWlubWVudSB7IHRleHQtYWxpZ246Y2VudGVyOyB9CiNtYWlubWVudSBhIHsgdGV4dC1hbGlnbjogY2VudGVyO3BhZGRpbmc6IDBweCA1cHggMHB4IDVweDsgfQojbWFpbmluZm8sLmJhcmhlYWRlciwuYmFyaGVhZGVyMiB7IHRleHQtYWxpZ246Y2VudGVyOyB9CiNtYWluaW5mbyB0ZCB7IHBhZGRpbmc6M3B4OyB9Ci5iYXJoZWFkZXIgeyBmb250LXdlaWdodDpib2xkO3BhZGRpbmc6NXB4OyB9Ci5iYXJoZWFkZXIyIHsgcGFkZGluZzo1cHg7Ym9yZGVyOjJweCBzb2xpZCBibGFjazsgfQouY29udGVudHMsLmV4cGxvcmVyIHsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO30KLmNvbnRlbnRzIHRkIHsgdmVydGljYWwtYWxpZ246dG9wOyB9Ci5tYWlucGFuZWwgeyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7cGFkZGluZzo1cHg7IH0KLmJhcmhlYWRlciwubWFpbnBhbmVsIHRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCBncmVlbjsgfQoubWFpbnBhbmVsIGlucHV0LHNlbGVjdCxvcHRpb24geyBib3JkZXI6MXB4IHNvbGlkIGJsYWNrO21hcmdpbjowOyB9CmlucHV0W3R5cGU9InN1Ym1pdCJdIHsgYm9yZGVyOjFweCBzb2xpZCBsaW1lOyB9CmlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmc6M3B4O30KLnNoZWxsIHsgYmFja2dyb3VuZC1jb2xvcjpibGFjaztjb2xvcjpibGFjaztwYWRkaW5nOjVweDsgfQouZnhlcnJtc2cgeyBjb2xvcjpyZWQ7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3BhZ2ViYXIsI3BhZ2ViYXIgcCxoMSxoMixoMyxoNCxmb3JtIHsgbWFyZ2luOjA7IH0KI3BhZ2ViYXIsLm1haW5wYW5lbCxpbnB1dFt0eXBlPSJzdWJtaXQiXSB7IGJhY2tncm91bmQtY29sb3I6YmxhY2s7IH0KLmJhcmhlYWRlcjIsaW5wdXQsc2VsZWN0LG9wdGlvbixpbnB1dFt0eXBlPSJzdWJtaXQiXTpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6YmxhY2s7IH0KdGV4dGFyZWEsLm1haW5wYW5lbCBpbnB1dCxzZWxlY3Qsb3B0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyB9Ci8vIC0tPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgonOwokaG9zdF9hbGxvdyA9IGFycmF5KCIqIik7IAokYWNjZXNzZGVuaWVkbWVzcyA9ICI8Ym9keSBiZ2NvbG9yPWJsYWNrPjxhIGhyZWY9XCIkc2hfbWFpbnVybFwiPjxmb250IGNvbG9yPWxpbWU+Ii4kc2hfbmFtZS4iPC9mb250PjwvYT46IDxmb250IGNvbG9yPXJlZD5hY2Nlc3MgZGVuaWVkPC9mb250PjwvYm9keT4iOwokZ3ppcGVuY29kZSA9IFRSVUU7CiRmaWxlc3RlYWx0aCA9IFRSVUU7IAokY3VyZGlyID0gIi4vIjsKJHRtcGRpciA9ICIiOyAKJHRtcGRpcl9sb2cgPSAiLi8iOwokbG9nX2VtYWlsID0gImRlYXJmYWxjb24yMUBnbWFpbC5jb20iOyAKJHNvcnRfZGVmYXVsdCA9ICIwYSI7IAokc29ydF9zYXZlID0gVFJVRTsgCiRzZXNzX2Nvb2tpZSA9ICJGYWxjb24tRzIxIERyYWsgVGVhbSI7IAokdXNlZnNidWZmID0gVFJVRTsgCiRjb3B5X3Vuc2V0ID0gRkFMU0U7IAokaGV4ZHVtcF9saW5lcyA9IDg7CiRoZXhkdW1wX3Jvd3MgPSAyNDsKJHdpbiA9IHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIjsKJGRpc2FibGVmdW5jID0gQGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7CmlmICghZW1wdHkoJGRpc2FibGVmdW5jKSkgewogICRkaXNhYmxlZnVuYyA9IHN0cl9yZXBsYWNlKCIgIiwiIiwkZGlzYWJsZWZ1bmMpOwogICRkaXNhYmxlZnVuYyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZnVuYyk7Cn0KZnVuY3Rpb24gZ2V0X3BocGluaSgpIHsKICBmdW5jdGlvbiBVX3dvcmR3cmFwKCRzdHIpIHsKICAgICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsKICAgIHJldHVybiBAcHJlZ19yZXBsYWNlKCchKCZbXjtdKik8d2JyIC8+KFteO10qOykhJywgJyQxJDI8d2JyIC8+JywgJHN0cik7CiAgfQogIGZ1bmN0aW9uIFVfdmFsdWUoJHZhbHVlKSB7CiAgICBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7CiAgICBpZiAoQGlzX2Jvb2woJHZhbHVlKSkgcmV0dXJuICR2YWx1ZSA/ICdUUlVFJyA6ICdGQUxTRSc7CiAgICBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOwogICAgaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7CiAgICBpZiAoQGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgQG9iX3N0YXJ0KCk7CiAgICAgIHByaW50X3IoJHZhbHVlKTsKICAgICAgJHZhbHVlID0gQG9iX2dldF9jb250ZW50cygpOwogICAgICBAb2JfZW5kX2NsZWFuKCk7CiAgICB9CiAgICByZXR1cm4gVV93b3Jkd3JhcCgoc3RyaW5nKSAkdmFsdWUpOwogIH0KICBpZiAoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldF9hbGwnKSkgewogICAgJHIgPSAiIjsKICAgIGVjaG8gIjx0YWJsZT48dHIgY2xhc3M9YmFyaGVhZGVyPjx0ZD5EaXJlY3RpdmU8L3RkPjx0ZD5Mb2NhbCBWYWx1ZTwvdGQ+PHRkPkdsb2JhbCBWYWx1ZTwvdGQ+PC90cj4iOwogICAgZm9yZWFjaCAoQGluaV9nZXRfYWxsKCkgYXMgJGtleT0+JHZhbHVlKSB7CiAgICAgICRyIC49ICI8dHI+PHRkPiIuJGtleS4iPC90ZD48dGQ+PGRpdiBhbGlnbj1jZW50ZXI+Ii5VX3ZhbHVlKCR2YWx1ZVsnbG9jYWxfdmFsdWUnXSkuIjwvZGl2PjwvdGQ+PHRkPjxkaXYgYWxpZ249Y2VudGVyPiIuVV92YWx1ZSgkdmFsdWVbJ2dsb2JhbF92YWx1ZSddKS4iPC9kaXY+PC90ZD48L3RyPiI7CiAgICB9CiAgICBlY2hvICRyOwogICAgZWNobyAiPC90YWJsZT4iOwogIH0KfQpmdW5jdGlvbiBkaXNwX2RyaXZlcygkY3VyZGlyLCRzdXJsKSB7CiAgJGxldHRlcnMgPSAiIjsKICAkdiA9IGV4cGxvZGUoIlxcIiwkY3VyZGlyKTsKICAkdiA9ICR2WzBdOwogIGZvcmVhY2ggKHJhbmdlKCJBIiwiWiIpIGFzICRsZXR0ZXIpIHsKICAgICRib29sID0gJGlzZGlza2V0dGUgPSAkbGV0dGVyID09ICJBIjsKICAgIGlmICghJGJvb2wpIHskYm9vbCA9IGlzX2RpcigkbGV0dGVyLiI6XFwiKTt9CiAgICBpZiAoJGJvb2wpIHsKICAgICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJGxldHRlci4iOlxcIikuIlwiIi4KICAgICAgKCRpc2Rpc2tldHRlPyIgb25jbGljaz1cInJldHVybiBjb25maXJtKCdNYWtlIHN1cmUgdGhhdCB0aGUgZGlza2V0dGUgaXMgaW5zZXJ0ZWQgcHJvcGVybHksIG90aGVyd2lzZSBhbiBlcnJvciBtYXkgb2NjdXIuJylcIiI6IiIpLiI+IFsiOwogICAgICBpZiAoJGxldHRlci4iOiIgIT0gJHYpIHskbGV0dGVycyAuPSAkbGV0dGVyO30KICAgICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPXllbGxvdz4iLiRsZXR0ZXIuIjwvZm9udD4iO30KICAgICAgJGxldHRlcnMgLj0gIl08L2E+ICI7CiAgICB9CiAgfQogIGlmICghZW1wdHkoJGxldHRlcnMpKSB7UmV0dXJuICRsZXR0ZXJzO30KICBlbHNlIHtSZXR1cm4gIk5vbmUiO30KfQppZiAoaXNfY2FsbGFibGUoImRpc2tfZnJlZV9zcGFjZSIpKSB7CiAgZnVuY3Rpb24gZGlzcF9mcmVlc3BhY2UoJGN1cmRydikgewogICAgJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGN1cmRydik7CiAgICAkdG90YWwgPSBkaXNrX3RvdGFsX3NwYWNlKCRjdXJkcnYpOwogICAgaWYgKCRmcmVlID09PSBGQUxTRSkgeyRmcmVlID0gMDt9CiAgICBpZiAoJHRvdGFsID09PSBGQUxTRSkgeyR0b3RhbCA9IDA7fQogICAgaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9CiAgICBpZiAoJHRvdGFsIDwgMCkgeyR0b3RhbCA9IDA7fQogICAgJHVzZWQgPSAkdG90YWwtJGZyZWU7CiAgICAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpLiIlIjsKICAgICRmcmVlID0gdmlld19zaXplKCRmcmVlKTsKICAgICR0b3RhbCA9IHZpZXdfc2l6ZSgkdG90YWwpOwogICAgcmV0dXJuICIkZnJlZSBvZiAkdG90YWwgKCRmcmVlX3BlcmNlbnQpIjsKICB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c2hlbGxleGVjIikpIHsKICBpZihpc19jYWxsYWJsZSgicG9wZW4iKSkgewogICAgZnVuY3Rpb24gbXlzaGVsbGV4ZWMoJGNtZCkgewogICAgICBpZiAoISgkcD1wb3BlbigiKCRjbWQpMj4mMSIsInIiKSkpIHsgcmV0dXJuICJwb3BlbiBEaXNhYmxlZCEiOyB9CiAgICAgIHdoaWxlICghZmVvZigkcCkpIHsKICAgICAgICAkbGluZT1mZ2V0cygkcCwxMDI0KTsKICAgICAgICAkb3V0IC49ICRsaW5lOwogICAgICB9CiAgICAgIHBjbG9zZSgkcCk7CiAgICAgIHJldHVybiAkb3V0OwogICAgfQogIH0gZWxzZSB7CiAgICBmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKSB7CiAgICAgIGdsb2JhbCAkZGlzYWJsZWZ1bmM7CiAgICAgICRyZXN1bHQgPSAiIjsKICAgICAgaWYgKCFlbXB0eSgkY21kKSkgewogICAgICAgIGlmIChpc19jYWxsYWJsZSgiZXhlYyIpIGFuZCAhaW5fYXJyYXkoImV4ZWMiLCRkaXNhYmxlZnVuYykpIHsKICAgICAgICAgIGV4ZWMoJGNtZCwkcmVzdWx0KTsKICAgICAgICAgICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7CiAgICAgICAgfSBlbHNlaWYgKCgkcmVzdWx0ID0gJGNtZCkgIT09IEZBTFNFKSB7CiAgICAgICAgfSBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzeXN0ZW0iKSBhbmQgIWluX2FycmF5KCJzeXN0ZW0iLCRkaXNhYmxlZnVuYykpIHsKICAgICAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgc3lzdGVtKCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjsKICAgICAgICB9IGVsc2VpZiAoaXNfY2FsbGFibGUoInBhc3N0aHJ1IikgYW5kICFpbl9hcnJheSgicGFzc3RocnUiLCRkaXNhYmxlZnVuYykpIHsKICAgICAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgcGFzc3RocnUoJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2OwogICAgICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkZnAgPSBwb3BlbigkY21kLCJyIikpKSB7CiAgICAgICAgICAkcmVzdWx0ID0gIiI7CiAgICAgICAgICB3aGlsZSghZmVvZigkZnApKSB7ICRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpOyB9CiAgICAgICAgICBwY2xvc2UoJGZwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGV4KCRjZmUpIHsKICAkcmVzID0gJyc7CiAgaWYgKCFlbXB0eSgkY2ZlKSkgewogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKICAgICAgQGV4ZWMoJGNmZSwkcmVzKTsKICAgICAgJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsKICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CiAgICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsKICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsKICAgICAgQG9iX3N0YXJ0KCk7CiAgICAgIEBzeXN0ZW0oJGNmZSk7CiAgICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgIEBvYl9lbmRfY2xlYW4oKTsKICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewogICAgICBAb2Jfc3RhcnQoKTsKICAgICAgQHBhc3N0aHJ1KCRjZmUpOwogICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgICBAb2JfZW5kX2NsZWFuKCk7CiAgICB9IGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkgewogICAgICAkcmVzID0gIiI7CiAgICAgIHdoaWxlKCFAZmVvZigkZikpIHsgJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IH0KICAgICAgQHBjbG9zZSgkZik7CiAgICB9IGVsc2UgeyAkcmVzID0gIkV4KCkgRGlzYWJsZWQhIjsgfQogIH0KICByZXR1cm4gJHJlczsKfQpmdW5jdGlvbiB3aGljaCgkcHIpIHsKICAkcGF0aCA9IGV4KCJ3aGljaCAkcHIiKTsKICBpZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuICRwcjsgfQp9CgokYmFja19jb25uZWN0X3BsID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzQ25WelpTQlRiMk5yWlhRN0NpUmpiV1E5SUNKemJHVmxjQ0k3Q2lSemVYTjBaVzA5SUNkbFkyaHZJQ0pnZFc1aGJXVWdMV0ZnSWp0bFkyaHZJQ0pnYVdSZ0lqdGxZMmh2SUNKZ1kyRjBJQzlsZEdNdmFYTnpkV1ZnSWp0bFkyaHZJQ0pnWTJGMElDOXdjbTlqTDNONWN5OTJiUzl0YldGd1gyMXBibDloWkdSeVlDSTdTRWxUVkVaSlRFVTlMMlJsZGk5dWRXeHNJQzlpYVc0dmMyZ2dMV2tuT3dva01EMGtZMjFrT3dva2RHRnlaMlYwUFNSQlVrZFdXekJkT3dva2NHOXlkRDBrUVZKSFZsc3hYVHNLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrZEdGeVoyVjBLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0NpUndZV1JrY2oxemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z0pHbGhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdDaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3Q25OdlkydGxkQ2hUVDBOTFJWUXNJRkJHWDBsT1JWUXNJRk5QUTB0ZlUxUlNSVUZOTENBa2NISnZkRzhwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc0tZMjl1Ym1WamRDaFRUME5MUlZRc0lDUndZV1JrY2lrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPd3B2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc0tiM0JsYmloVFZFUlBWVlFzSUNJK0psTlBRMHRGVkNJcE93cHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVUwOURTMFZVSWlrN0NuTjVjM1JsYlNna2MzbHpkR1Z0S1RzS1kyeHZjMlVvVTFSRVNVNHBPd3BqYkc5elpTaFRWRVJQVlZRcE93cGpiRzl6WlNoVFZFUkZVbElwT3ciOwokYmFja2Rvb3IgPSAiZjBWTVJnRUJBUUFBQUFBQUFBQUFBQUlBQXdBQkFBQUFvSVVFQ0RRQUFBRDRFZ0FBQUFBQUFEUUFJQUFIQUNnQUlnQWZBQVlBQUFBMEFBQUFOSUFFQ0RTQUJBamdBQUFBNEFBQUFBVUFBQUFFQUFBQUF3QUFBQlFCQUFBVWdRUUlGSUVFQ0JNQUFBQVRBQUFBQkFBQUFBRUFBQUFCQUFBQUFBQUFBQUNBQkFnQWdBUUlyQWtBQUt3SkFBQUZBQUFBQUJBQUFBRUFBQUNzQ1FBQXJKa0VDS3laQkFnMEFRQUFPQUVBQUFZQUFBQUFFQUFBQWdBQUFNQUpBQURBbVFRSXdKa0VDTWdBQUFESUFBQUFCZ0FBQUFRQUFBQUVBQUFBS0FFQUFDaUJCQWdvZ1FRSUlBQUFBQ0FBQUFBRUFBQUFCQUFBQUZIbGRHUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBRUFBQUFMMnhwWWk5c1pDMXNhVzUxZUM1emJ5NHlBQUFFQUFBQUVBQUFBQUVBQUFCSFRsVUFBQUFBQUFJQUFBQUNBQUFBQUFBQUFCRUFBQUFUQUFBQUFBQUFBQUFBQUFBUUFBQUFFUUFBQUFBQUFBQUFBQUFBQ1FBQUFBZ0FBQUFGQUFBQUF3QUFBQTBBQUFBQUFBQUFBQUFBQUE4QUFBQUtBQUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWUFBQUFCQUFBQUFBQUFBQWNBQUFBTEFBQUFBQUFBQUFRQUFBQU1BQUFBRGdBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM0QUFBQUFBQUFBZFFFQUFCSUFBQUNnQUFBQUFBQUFBSEVBQUFBU0FBQUFOQUFBQUFBQUFBRE1BQUFBRWdBQUFHb0FBQUFBQUFBQVdnQUFBQklBQUFCTUFBQUFBQUFBQUhnQUFBQVNBQUFBWXdBQUFBQUFBQUE1QUFBQUVnQUFBRmdBQUFBQUFBQUFPUUFBQUJJQUFBQ09BQUFBQUFBQUFPWUFBQUFTQUFBQU93QUFBQUFBQUFBNkFBQUFFZ0FBQUZNQUFBQUFBQUFBT1FBQUFCSUFBQUIxQUFBQUFBQUFBTGtBQUFBU0FBQUFlZ0FBQUFBQUFBQXJBQUFBRWdBQUFFY0FBQUFBQUFBQWVBQUFBQklBQUFCdkFBQUFBQUFBQUE0QUFBQVNBQUFBZndBQUFFaUpCQWdFQUFBQUVRQU9BRUFBQUFBQUFBQUFPUUFBQUJJQUFBQUJBQUFBQUFBQUFBQUFBQUFnQUFBQUZRQUFBQUFBQUFBQUFBQUFJQUFBQUFCZlNuWmZVbVZuYVhOMFpYSkRiR0Z6YzJWekFGOWZaMjF2Ymw5emRHRnlkRjlmQUd4cFltTXVjMjh1TmdCbGVHVmpiQUJ3WlhKeWIzSUFaSFZ3TWdCemIyTnJaWFFBYzJWdVpBQmhZMk5sY0hRQVltbHVaQUJ6WlhSemIyTnJiM0IwQUd4cGMzUmxiZ0JtYjNKckFHaDBiMjV6QUdWNGFYUUFZWFJ2YVFCZlNVOWZjM1JrYVc1ZmRYTmxaQUJmWDJ4cFltTmZjM1JoY25SZmJXRnBiZ0JqYkc5elpRQkhURWxDUTE4eUxqQUFBQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQVFBQ0FBQUFBQUFBQUFFQUFRQWtBQUFBRUFBQUFBQUFBQUFRYVdrTkFBQUNBS1lBQUFBQUFBQUFpSm9FQ0FZU0FBQ1ltZ1FJQndFQUFKeWFCQWdIQWdBQW9Kb0VDQWNEQUFDa21nUUlCd1FBQUtpYUJBZ0hCUUFBckpvRUNBY0dBQUN3bWdRSUJ3Y0FBTFNhQkFnSENBQUF1Sm9FQ0FjSkFBQzhtZ1FJQndvQUFNQ2FCQWdIQ3dBQXhKb0VDQWNNQUFESW1nUUlCdzBBQU15YUJBZ0hEZ0FBMEpvRUNBY1FBQUJWaWVXRDdBam9NUUVBQU9pREFRQUE2RnNFQUFESnd3RC9OWkNhQkFqL0paU2FCQWdBQUFBQS95V1ltZ1FJYUFBQUFBRHA0UC8vLy84bG5Kb0VDR2dJQUFBQTZkRC8vLy8vSmFDYUJBaG9FQUFBQU9uQS8vLy8veVdrbWdRSWFCZ0FBQURwc1AvLy8vOGxxSm9FQ0dnZ0FBQUE2YUQvLy8vL0pheWFCQWhvS0FBQUFPbVEvLy8vL3lXd21nUUlhREFBQUFEcGdQLy8vLzhsdEpvRUNHZzRBQUFBNlhELy8vLy9KYmlhQkFob1FBQUFBT2xnLy8vLy95VzhtZ1FJYUVnQUFBRHBVUC8vLy84bHdKb0VDR2hRQUFBQTZVRC8vLy8vSmNTYUJBaG9XQUFBQU9rdy8vLy8veVhJbWdRSWFHQUFBQURwSVAvLy8vOGx6Sm9FQ0dob0FBQUE2UkQvLy8vL0pkQ2FCQWhvY0FBQUFPa0EvLy8vTWUxZWllR0Q1UEJRVkZKb3JZZ0VDR2hjaUFRSVVWWm9RSVlFQ09oZi8vLy85SkNRVllubFUrZ2JBQUFBZ2NPL0ZBQUFnK3dFaTRQOC8vLy9oY0IwQXYvUWc4UUVXMTNEaXh3a3cxV0o1WVBzQ0lBOTRKb0VDQUIwRE9zY2c4QUVvOXlhQkFqLzBxSGNtZ1FJaXhDRjBuWHJ4Z1hnbWdRSUFjbkRWWW5sZyt3SW9ieVpCQWlGd0hRU3VBQUFBQUNGd0hRSnh3UWt2SmtFQ1AvUXljT1FrRldKNVZlRDdHU0Q1UEM0QUFBQUFJUEFENFBBRDhIb0JNSGdCQ25FeDBYa0FRQUFBTWRGK0V5SkJBakhSQ1FJQUFBQUFNZEVKQVFCQUFBQXh3UWtBZ0FBQU9nSi8vLy9pVVh3ZzMzd0FIa1l4d1FraklrRUNPZzAvdi8veHdRa0FRQUFBT2lvL3YvL1pzZEYxQUlBeDBYWUFBQUFBSXRGRElQQUJJc0FpUVFrNkp2Ky8vOFB0OENKQkNUb3NQNy8vMmFKUmRiSFJDUVFCQUFBQUkxRjVJbEVKQXpIUkNRSUFnQUFBTWRFSkFRQkFBQUFpMFh3aVFRazZCTCsvLytOUmRUSFJDUUlFQUFBQUlsRUpBU0xSZkNKQkNUb0tQNy8vNFhBZVJqSEJDU1RpUVFJNktqOS8vL0hCQ1FCQUFBQTZCeisvLy9IUkNRRUNBQUFBSXRGOElrRUpPaTUvZi8vaGNCNUdNY0VKSmlKQkFqb2VmMy8vOGNFSkFFQUFBRG83ZjMvLzhkRjZCQUFBQUNOUmVpTlZjU0pSQ1FJaVZRa0JJdEY4SWtFSk9odC9mLy9pVVgwZzMzMEFIa014d1FraklrRUNPZzQvZi8vNkVQOS8vK0Z3QStFcHdBQUFJdEYrTG4vLy8vL2lVVzR1QUFBQUFEOGkzMjQ4cTZKeVBmUWcrZ0J4MFFrREFBQUFBQ0pSQ1FJaTBYNGlVUWtCSXRGOUlrRUpPaVEvZi8veDBRa0JBQUFBQUNMUmZTSkJDVG9QZjMvLzhkRUpBUUJBQUFBaTBYMGlRUWs2Q3I5Ly8vSFJDUUVBZ0FBQUl0RjlJa0VKT2dYL2YvL3gwUWtDQUFBQUFESFJDUUVuNGtFQ01jRUpKK0pCQWpvZS96Ly80dEY4SWtFSk9pQS9QLy94d1FrQUFBQUFPZ0UvZi8vaTBYMGlRUWs2R244Ly8vcER2Ly8vMVdKNVZkV01mWlQ2SC85Ly8rQnd5TVNBQUNEN0F6b0Vmei8vNDJESVAvLy80MlRJUC8vLzRsRjhDblF3ZmdDT2NaekZvblgveFN5aTBYd2c4WUJLZmlKK3NINEFqbkdjdXlEeEF4YlhsOWR3MVdKNVlQc0dJbGQ5T2d0L2YvL2djUFJFUUFBaVhYNGlYMzhqYk1nLy8vL2pic2cvLy8vS2Y3Qi9nTHJBLzhVdDRQdUFZUCsvM1gxNkRvQUFBQ0xYZlNMZGZpTGZmeUo3RjNEa0ZXSjVWT0Q3QVNockprRUNJUDQvM1FTdTZ5WkJBai8wSXREL0lQckJJUDQvM1h6ZzhRRVcxM0RrSkNRVllubFUraTcvUC8vZ2NOZkVRQUFnK3dFNkxIOC8vK0R4QVJiWGNNQUFBQURBQUFBQVFBQ0FEbzZJSGMwWTJzeGJtY3RjMmhsYkd3Z0tGQnlhWFpoZEdVZ1FuVnBiR1FnZGpBdU15a2dZbWx1WkNCemFHVnNiQ0JpWVdOclpHOXZjaUE2T2lBS0NnQnpiMk5yWlhRQVltbHVaQUJzYVhOMFpXNEFMMkpwYmk5emFBQUFBQUFBQVAvLy8vOEFBQUFBLy8vLy93QUFBQUFBQUFBQUFRQUFBQ1FBQUFBTUFBQUFpSVFFQ0EwQUFBQWtpUVFJQkFBQUFFaUJCQWdGQUFBQUVJTUVDQVlBQUFEZ2dRUUlDZ0FBQUxBQUFBQUxBQUFBRUFBQUFCVUFBQUFBQUFBQUF3QUFBSXlhQkFnQ0FBQUFlQUFBQUJRQUFBQVJBQUFBRndBQUFCQ0VCQWdSQUFBQUNJUUVDQklBQUFBSUFBQUFFd0FBQUFnQUFBRCsvLzl2NklNRUNQLy8vMjhCQUFBQThQLy9iOENEQkFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd0prRUNBQUFBQUFBQUFBQXRvUUVDTWFFQkFqV2hBUUk1b1FFQ1BhRUJBZ0doUVFJRm9VRUNDYUZCQWcyaFFRSVJvVUVDRmFGQkFobWhRUUlkb1VFQ0lhRkJBaVdoUVFJQUFBQUFBQUFBQUM0bVFRSUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUFBY0FBQUFBZ0FBQUFBQUJBQUFBQUFBb0lVRUNDSUFBQUFBQUFBQUFBQUFBRFFBQUFBQ0FBc0JBQUFFQUFBQUFBRG9oUVFJQkFBQUFDU0pCQWdTQUFBQWlJUUVDQXNBQUFERWhRUUlKQUFBQUFBQUFBQUFBQUFBTEFBQUFBSUFtd0VBQUFRQUFBQUFBT2lGQkFnRUFBQUFPNGtFQ0FZQUFBQ2RoQVFJQWdBQUFBQUFBQUFBQUFBQUlRQUFBQUlBZWdBQUFKRUFBQUI1QUFBQVgwbFBYM04wWkdsdVgzVnpaV1FBQUFBQUFIWUFBQUFDQUFBQUFBQUVBUUFBQUFDZ2hRUUl3b1VFQ0M0dUwzTjVjMlJsY0hNdmFUTTROaTlsYkdZdmMzUmhjblF1VXdBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdloyeHBZbU10TWk0ekxqWXZZM04xQUVkT1ZTQkJVeUF5TGpFMkxqa3hBQUdBalFBQUFBSUFGQUFBQUFRQld3QUFBTVNGQkFqRWhRUUlZZ0FBQUFFQUFBQUFFUUFBQUFLUUFBQUFCQWNDVkFBQUFBRUlBcDBBQUFBQ0J3S0xBQUFBQkFjQ1ZnQUFBQUVHQWdjQUFBQUNCUU5wYm5RQUJBVUNSZ0FBQUFnRkFvWUFBQUFJQndKTEFBQUFCQVVDa0FBQUFBUUhBbDBBQUFBQkJnU3dBQUFBQVJtTEFBQUFBUVVEU0lrRUNBVlBBQUFBQUl3QUFBQUNBRllBQUFBRUFZSUFBQUF2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRTOWpjblJwTGxNQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCSFRsVWdRVk1nTWk0eE5pNDVNUUFCZ0l3QUFBQUNBR1lBQUFBRUFTOEJBQUF2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRTOWpjblJ1TGxNQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCSFRsVWdRVk1nTWk0eE5pNDVNUUFCZ0FFUkFCQUdFUUVTQVFNSUd3Z2xDQk1GQUFBQUFSRUJFQVlTQVJFQkpRNFRDd01PR3c0QUFBSWtBQU1PQ3dzK0N3QUFBeVFBQXdnTEN6NExBQUFFTkFBRERqb0xPd3RKRXo4TUFnb0FBQVVtQUVrVEFBQUFBUkVBRUFZRENCc0lKUWdUQlFBQUFBRVJBQkFHQXdnYkNDVUlFd1VBQUFCWEFBQUFBZ0F5QUFBQUFRSDdEZzBBQVFFQkFRQUFBQUVBQUFFdUxpOXplWE5rWlhCekwya3pPRFl2Wld4bUFBQnpkR0Z5ZEM1VEFBRUFBQUFBQlFLZ2hRUUlBOEFBQVRNaE5EMGxJZ01ZSUZsYUlTSmNXd0lCQUFFQkl3QUFBQUlBSFFBQUFBRUIrdzROQUFFQkFRRUFBQUFCQUFBQkFHbHVhWFF1WXdBQUFBQUFxUUFBQUFJQVVBQUFBQUVCK3c0TkFBRUJBUUVBQUFBQkFBQUJMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmt6T0RZdGJHbGlZeTlqYzNVQUFHTnlkR2t1VXdBQkFBQUFBQVVDNklVRUNBUEFBQUU5QWdFQUFRRUFCUUlraVFRSUF5NEJJUzhoV1djQ0F3QUJBUUFGQW9pRUJBZ0RId0VoTHowQ0JRQUJBUUFGQXNTRkJBZ0RDZ0VoTHlGWlp6MW5MeTh3UFNFaEFnRUFBUUdJQUFBQUFnQlFBQUFBQVFIN0RnMEFBUUVCQVFBQUFBRUFBQUV2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRRQUFZM0owYmk1VEFBRUFBQUFBQlFMb2hRUUlBeUVCUFFJQkFBRUJBQVVDTzRrRUNBTVNBVDBoSVFJQkFBRUJBQVVDbllRRUNBTUpBU0VDQVFBQkFXbHVhWFF1WXdCemFHOXlkQ0JwYm5RQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCc2IyNW5JR3h2Ym1jZ2FXNTBBSFZ1YzJsbmJtVmtJR05vWVhJQVIwNVZJRU1nTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQWJHOXVaeUJzYjI1bklIVnVjMmxuYm1Wa0lHbHVkQUJ6YUc5eWRDQjFibk5wWjI1bFpDQnBiblFBWDBsUFgzTjBaR2x1WDNWelpXUUFBQzV6ZVcxMFlXSUFMbk4wY25SaFlnQXVjMmh6ZEhKMFlXSUFMbWx1ZEdWeWNBQXVibTkwWlM1QlFra3RkR0ZuQUM1b1lYTm9BQzVrZVc1emVXMEFMbVI1Ym5OMGNnQXVaMjUxTG5abGNuTnBiMjRBTG1kdWRTNTJaWEp6YVc5dVgzSUFMbkpsYkM1a2VXNEFMbkpsYkM1d2JIUUFMbWx1YVhRQUxuUmxlSFFBTG1acGJta0FMbkp2WkdGMFlRQXVaV2hmWm5KaGJXVUFMbU4wYjNKekFDNWtkRzl5Y3dBdWFtTnlBQzVrZVc1aGJXbGpBQzVuYjNRQUxtZHZkQzV3YkhRQUxtUmhkR0VBTG1KemN3QXVZMjl0YldWdWRBQXVaR1ZpZFdkZllYSmhibWRsY3dBdVpHVmlkV2RmY0hWaWJtRnRaWE1BTG1SbFluVm5YMmx1Wm04QUxtUmxZblZuWDJGaVluSmxkZ0F1WkdWaWRXZGZiR2x1WlFBdVpHVmlkV2RmYzNSeUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR3dBQUFBRUFBQUFDQUFBQUZJRUVDQlFCQUFBVEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDTUFBQUFIQUFBQUFnQUFBQ2lCQkFnb0FRQUFJQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUF4QUFBQUJRQUFBQUlBQUFCSWdRUUlTQUVBQUpnQUFBQUVBQUFBQUFBQUFBUUFBQUFFQUFBQU53QUFBQXNBQUFBQ0FBQUE0SUVFQ09BQkFBQXdBUUFBQlFBQUFBRUFBQUFFQUFBQUVBQUFBRDhBQUFBREFBQUFBZ0FBQUJDREJBZ1FBd0FBc0FBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFCSEFBQUEvLy8vYndJQUFBREFnd1FJd0FNQUFDWUFBQUFFQUFBQUFBQUFBQUlBQUFBQ0FBQUFWQUFBQVA3Ly8yOENBQUFBNklNRUNPZ0RBQUFnQUFBQUJRQUFBQUVBQUFBRUFBQUFBQUFBQUdNQUFBQUpBQUFBQWdBQUFBaUVCQWdJQkFBQUNBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQnNBQUFBQ1FBQUFBSUFBQUFRaEFRSUVBUUFBSGdBQUFBRUFBQUFDd0FBQUFRQUFBQUlBQUFBZFFBQUFBRUFBQUFHQUFBQWlJUUVDSWdFQUFBWEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFIQUFBQUFCQUFBQUJnQUFBS0NFQkFpZ0JBQUFBQUVBQUFBQUFBQUFBQUFBQkFBQUFBUUFBQUI3QUFBQUFRQUFBQVlBQUFDZ2hRUUlvQVVBQUlRREFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQWdRQUFBQUVBQUFBR0FBQUFKSWtFQ0NRSkFBQWRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBSWNBQUFBQkFBQUFBZ0FBQUVTSkJBaEVDUUFBWXdBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDUEFBQUFBUUFBQUFJQUFBQ29pUVFJcUFrQUFBUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFtUUFBQUFFQUFBQURBQUFBckprRUNLd0pBQUFJQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUtBQUFBQUJBQUFBQXdBQUFMU1pCQWkwQ1FBQUNBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ25BQUFBQVFBQUFBTUFBQUM4bVFRSXZBa0FBQVFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBckFBQUFBWUFBQUFEQUFBQXdKa0VDTUFKQUFESUFBQUFCUUFBQUFBQUFBQUVBQUFBQ0FBQUFMVUFBQUFCQUFBQUF3QUFBSWlhQkFpSUNnQUFCQUFBQUFBQUFBQUFBQUFBQkFBQUFBUUFBQUM2QUFBQUFRQUFBQU1BQUFDTW1nUUlqQW9BQUVnQUFBQUFBQUFBQUFBQUFBUUFBQUFFQUFBQXd3QUFBQUVBQUFBREFBQUExSm9FQ05RS0FBQU1BQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBTWtBQUFBSUFBQUFBd0FBQU9DYUJBamdDZ0FBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFET0FBQUFBUUFBQUFBQUFBQUFBQUFBNEFvQUFDWUJBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUExd0FBQUFFQUFBQUFBQUFBQUFBQUFBZ01BQUNJQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBQU9ZQUFBQUJBQUFBQUFBQUFBQUFBQUNRREFBQUpRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBRDJBQUFBQVFBQUFBQUFBQUFBQUFBQXRRd0FBQ3NDQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdFQUFBRUFBQUFBQUFBQUFBQUFBT0FPQUFCMkFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFCQUJBQUFCQUFBQUFBQUFBQUFBQUFCV0R3QUF1d0VBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFjQVFBQUFRQUFBREFBQUFBQUFBQUFFUkVBQUw4QUFBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUVRQUFBQU1BQUFBQUFBQUFBQUFBQU5BUkFBQW5BUUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUVBQUFBQ0FBQUFBQUFBQUFBQUFBQklHQUFBOEFVQUFDRUFBQUEvQUFBQUJBQUFBQkFBQUFBSkFBQUFBd0FBQUFBQUFBQUFBQUFBT0I0QUFMSURBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVZ1FRSUFBQUFBQU1BQVFBQUFBQUFLSUVFQ0FBQUFBQURBQUlBQUFBQUFFaUJCQWdBQUFBQUF3QURBQUFBQUFEZ2dRUUlBQUFBQUFNQUJBQUFBQUFBRUlNRUNBQUFBQUFEQUFVQUFBQUFBTUNEQkFnQUFBQUFBd0FHQUFBQUFBRG9nd1FJQUFBQUFBTUFCd0FBQUFBQUNJUUVDQUFBQUFBREFBZ0FBQUFBQUJDRUJBZ0FBQUFBQXdBSkFBQUFBQUNJaEFRSUFBQUFBQU1BQ2dBQUFBQUFvSVFFQ0FBQUFBQURBQXNBQUFBQUFLQ0ZCQWdBQUFBQUF3QU1BQUFBQUFBa2lRUUlBQUFBQUFNQURRQUFBQUFBUklrRUNBQUFBQUFEQUE0QUFBQUFBS2lKQkFnQUFBQUFBd0FQQUFBQUFBQ3NtUVFJQUFBQUFBTUFFQUFBQUFBQXRKa0VDQUFBQUFBREFCRUFBQUFBQUx5WkJBZ0FBQUFBQXdBU0FBQUFBQURBbVFRSUFBQUFBQU1BRXdBQUFBQUFpSm9FQ0FBQUFBQURBQlFBQUFBQUFJeWFCQWdBQUFBQUF3QVZBQUFBQUFEVW1nUUlBQUFBQUFNQUZnQUFBQUFBNEpvRUNBQUFBQUFEQUJjQUFBQUFBQUFBQUFBQUFBQUFBd0FZQUFBQUFBQUFBQUFBQUFBQUFBTUFHUUFBQUFBQUFBQUFBQUFBQUFBREFCb0FBQUFBQUFBQUFBQUFBQUFBQXdBYkFBQUFBQUFBQUFBQUFBQUFBQU1BSEFBQUFBQUFBQUFBQUFBQUFBQURBQjBBQUFBQUFBQUFBQUFBQUFBQUF3QWVBQUFBQUFBQUFBQUFBQUFBQUFNQUh3QUFBQUFBQUFBQUFBQUFBQUFEQUNBQUFBQUFBQUFBQUFBQUFBQUFBd0FoQUFFQUFBQUFBQUFBQUFBQUFBUUE4ZjhNQUFBQUFBQUFBQUFBQUFBRUFQSC9LQUFBQUFBQUFBQUFBQUFBQkFEeC95OEFBQUFBQUFBQUFBQUFBQVFBOGY4NkFBQUFBQUFBQUFBQUFBQUVBUEgvZEFBQUFNU0ZCQWdBQUFBQUFnQU1BSVFBQUFBQUFBQUFBQUFBQUFRQThmK1BBQUFBckprRUNBQUFBQUFCQUJBQW5RQUFBTFNaQkFnQUFBQUFBUUFSQUtzQUFBQzhtUVFJQUFBQUFBRUFFZ0M0QUFBQTRKb0VDQUVBQUFBQkFCY0F4d0FBQU55YUJBZ0FBQUFBQVFBV0FNNEFBQURzaFFRSUFBQUFBQUlBREFEa0FBQUFHNFlFQ0FBQUFBQUNBQXdBaEFBQUFBQUFBQUFBQUFBQUJBRHgvL0FBQUFDd21RUUlBQUFBQUFFQUVBRDlBQUFBdUprRUNBQUFBQUFCQUJFQUNnRUFBS2lKQkFnQUFBQUFBUUFQQUJnQkFBQzhtUVFJQUFBQUFBRUFFZ0FrQVFBQStJZ0VDQUFBQUFBQ0FBd0FMd0FBQUFBQUFBQUFBQUFBQkFEeC96b0JBQUFBQUFBQUFBQUFBQVFBOGY5MEFRQUFBQUFBQUFBQUFBQUVBUEgvZUFFQUFNQ1pCQWdBQUFBQUFRSVRBSUVCQUFDc21RUUlBQUFBQUFBQzhmK1NBUUFBckprRUNBQUFBQUFBQXZIL3BRRUFBS3laQkFnQUFBQUFBQUx4LzdZQkFBQ01tZ1FJQUFBQUFBRUNGUURNQVFBQXJKa0VDQUFBQUFBQUF2SC8zd0VBQUFBQUFBQjFBUUFBRWdBQUFQQUJBQUFBQUFBQWNRQUFBQklBQUFBQkFnQUFSSWtFQ0FRQUFBQVJBQTRBQ0FJQUFBQUFBQURNQUFBQUVnQUFBQm9DQUFBQUFBQUFXZ0FBQUJJQUFBQXFBZ0FBMkpvRUNBQUFBQUFSQWhZQU53SUFBSzJJQkFoS0FBQUFFZ0FNQUVjQ0FBQUFBQUFBZUFBQUFCSUFBQUJaQWdBQWlJUUVDQUFBQUFBU0FBb0FYd0lBQUFBQUFBQTVBQUFBRWdBQUFIRUNBQUFBQUFBQU9RQUFBQklBQUFDSEFnQUFvSVVFQ0FBQUFBQVNBQXdBamdJQUFGeUlCQWhSQUFBQUVnQU1BSjRDQUFEZ21nUUlBQUFBQUJBQThmK3FBZ0FBUUlZRUNCd0NBQUFTQUF3QXJ3SUFBQUFBQUFEbUFBQUFFZ0FBQU13Q0FBQUFBQUFBT2dBQUFCSUFBQURjQWdBQTFKb0VDQUFBQUFBZ0FCWUE1d0lBQUFBQUFBQTVBQUFBRWdBQUFQY0NBQUFraVFRSUFBQUFBQklBRFFEOUFnQUFBQUFBQUxrQUFBQVNBQUFBRFFNQUFBQUFBQUFyQUFBQUVnQUFBQjBEQUFEZ21nUUlBQUFBQUJBQThmOGtBd0FBNklVRUNBQUFBQUFTQWd3QU93TUFBT1NhQkFnQUFBQUFFQUR4LzBBREFBQUFBQUFBZUFBQUFCSUFBQUJRQXdBQUFBQUFBQTRBQUFBU0FBQUFZUU1BQUVpSkJBZ0VBQUFBRVFBT0FIQURBQURVbWdRSUFBQUFBQkFBRmdCOUF3QUFBQUFBQURrQUFBQVNBQUFBandNQUFBQUFBQUFBQUFBQUlBQUFBS01EQUFBQUFBQUFBQUFBQUNBQUFBQUFZV0pwTFc1dmRHVXVVd0F1TGk5emVYTmtaWEJ6TDJrek9EWXZaV3htTDNOMFlYSjBMbE1BYVc1cGRDNWpBR2x1YVhSbWFXNXBMbU1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJrek9EWXRiR2xpWXk5amMzVXZZM0owYVM1VEFHTmhiR3hmWjIxdmJsOXpkR0Z5ZEFCamNuUnpkSFZtWmk1akFGOWZRMVJQVWw5TVNWTlVYMThBWDE5RVZFOVNYMHhKVTFSZlh3QmZYMHBEVWw5TVNWTlVYMThBWTI5dGNHeGxkR1ZrTGpRME5qTUFjQzQwTkRZeUFGOWZaRzlmWjJ4dlltRnNYMlIwYjNKelgyRjFlQUJtY21GdFpWOWtkVzF0ZVFCZlgwTlVUMUpmUlU1RVgxOEFYMTlFVkU5U1gwVk9SRjlmQUY5ZlJsSkJUVVZmUlU1RVgxOEFYMTlLUTFKZlJVNUVYMThBWDE5a2IxOW5iRzlpWVd4ZlkzUnZjbk5mWVhWNEFDOWlkV2xzWkM5aWRXbHNaR1F2WjJ4cFltTXRNaTR6TGpZdlluVnBiR1F0ZEhKbFpTOXBNemcyTFd4cFltTXZZM04xTDJOeWRHNHVVd0F4TG1NQVgwUlpUa0ZOU1VNQVgxOW1hVzVwWDJGeWNtRjVYMlZ1WkFCZlgyWnBibWxmWVhKeVlYbGZjM1JoY25RQVgxOXBibWwwWDJGeWNtRjVYMlZ1WkFCZlIweFBRa0ZNWDA5R1JsTkZWRjlVUVVKTVJWOEFYMTlwYm1sMFgyRnljbUY1WDNOMFlYSjBBR1Y0WldOc1FFQkhURWxDUTE4eUxqQUFZMnh2YzJWQVFFZE1TVUpEWHpJdU1BQmZabkJmYUhjQWNHVnljbTl5UUVCSFRFbENRMTh5TGpBQVptOXlhMEJBUjB4SlFrTmZNaTR3QUY5ZlpITnZYMmhoYm1Sc1pRQmZYMnhwWW1OZlkzTjFYMlpwYm1rQVlXTmpaWEIwUUVCSFRFbENRMTh5TGpBQVgybHVhWFFBYkdsemRHVnVRRUJIVEVsQ1ExOHlMakFBYzJWMGMyOWphMjl3ZEVCQVIweEpRa05mTWk0d0FGOXpkR0Z5ZEFCZlgyeHBZbU5mWTNOMVgybHVhWFFBWDE5aWMzTmZjM1JoY25RQWJXRnBiZ0JmWDJ4cFltTmZjM1JoY25SZmJXRnBia0JBUjB4SlFrTmZNaTR3QUdSMWNESkFRRWRNU1VKRFh6SXVNQUJrWVhSaFgzTjBZWEowQUdKcGJtUkFRRWRNU1VKRFh6SXVNQUJmWm1sdWFRQmxlR2wwUUVCSFRFbENRMTh5TGpBQVlYUnZhVUJBUjB4SlFrTmZNaTR3QUY5bFpHRjBZUUJmWDJrMk9EWXVaMlYwWDNCalgzUm9kVzVyTG1KNEFGOWxibVFBYzJWdVpFQkFSMHhKUWtOZk1pNHdBR2gwYjI1elFFQkhURWxDUTE4eUxqQUFYMGxQWDNOMFpHbHVYM1Z6WldRQVgxOWtZWFJoWDNOMFlYSjBBSE52WTJ0bGRFQkFSMHhKUWtOZk1pNHdBRjlLZGw5U1pXZHBjM1JsY2tOc1lYTnpaWE1BWDE5bmJXOXVYM04wWVhKMFgxOEEiOwpmdW5jdGlvbiBjZigkZm5hbWUsJHRleHQpIHsKICAkd19maWxlPUBmb3BlbigkZm5hbWUsInciKSBvciBlcnIoKTsKICBpZigkd19maWxlKSB7CiAgICBAZnB1dHMoJHdfZmlsZSxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOwogICAgQGZjbG9zZSgkd19maWxlKTsKICB9Cn0KCmZ1bmN0aW9uIGNmYigkZm5hbWUsJHRleHQpIHsKICAkd19maWxlPUBmb3BlbigkZm5hbWUsInciKSBvciBiYmVycigpOwogIGlmKCR3X2ZpbGUpIHsKICAgIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7CiAgICBAZmNsb3NlKCR3X2ZpbGUpOwogIH0KfQpmdW5jdGlvbiBlcnIoKSB7ICRfUE9TVFsnYmFja2Njb25ubXNnZSddPSI8YnI+PGJyPjxkaXYgY2xhc3M9ZnhlcnJtc2c+RXJyb3I6PC9kaXY+IENhbid0IGNvbm5lY3QhIjsgfQpmdW5jdGlvbiBiYmVycigpIHsgJF9QT1NUWydiYWNrY2Nvbm5tc2dlJ109Ijxicj48YnI+PGRpdiBjbGFzcz1meGVycm1zZz5FcnJvcjo8L2Rpdj4gQ2FuJ3QgYmFja2Rvb3IgaG9zdCEiOyB9CgppZiAoIWVtcHR5KCRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0ic2xlZXAiKSkgewogICRpcCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKTsKICAkcG9yID0gJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXTsKICBpZiAoaXNfd3JpdGFibGUoIi4iKSkgewogICAgY2ZiKCJzbGVlcCIsJGJhY2tkb29yKTsKICAgIGV4KCJjaG1vZCA3NTUgc2xlZXAiKTsKICAgICRjbWQgPSAiLi9zbGVlcCAkcG9yIjsKICAgIGV4ZWMoIiRjbWQgPiAvZGV2L251bGwgJiIpOwogICAgJHNjYW4gPSBteXNoZWxsZXhlYygicHMgLWF1eCIpOwogIH0gZWxzZSB7CiAgICBjZmIoIi90bXAvc2xlZXAiLCRiYWNrZG9vcik7CiAgICBleCgiY2htb2QgNzU1IC90bXAvc2xlZXAiKTsKICAgICRjbWQgPSAiLi90bXAvc2xlZXAgJHBvciI7CiAgICBleGVjKCIkY21kID4gL2Rldi9udWxsICYiKTsKICAgICRzY2FuID0gbXlzaGVsbGV4ZWMoInBzIC1hdXgiKTsKICB9CiAgaWYgKGVyZWdpKCIuL3NsZWVwICRwb3IiLCRzY2FuKSkgewogICAgJGRhdGEgPSAoIlxuPGJyPm5nZWJpbmQgYmVyaGFzaWwgZ2FuLiIpOwogIH0gZWxzZSB7CiAgICAkZGF0YSA9ICgiXG48YnI+bmdlYmluZCBnYWdhbCBnYW4gOigiKTsKICB9CiAgJF9QT1NUWydiYWNrY2Nvbm5tc2cnXT0iVG8gY29ubmVjdCwgdXNlIG5ldGNhdCEgVXNhZ2U6IDxiPiduYyAkaXAgJHBvcic8L2I+LiRkYXRhIjsKfQoKaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0aXAnXSkgJiYgIWVtcHR5KCRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKSB7CiAgaWYgKGlzX3dyaXRhYmxlKCIuIikpIHsKICAgIGNmKCJiYWNrIiwkYmFja19jb25uZWN0X3BsKTsKICAgICRwMiA9IHdoaWNoKCJwZXJsIik7CiAgICAkYmxhaCA9IGV4KCRwMi4iIGJhY2sgIi4kX1BPU1RbJ2JhY2tjb25uZWN0aXAnXS4iICIuJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXS4iICYiKTsKICAgIGlmIChmaWxlX2V4aXN0cygiYmFjayIpKSB7IHVubGluaygiYmFjayIpOyB9CiAgfSBlbHNlIHsKICAgIGNmKCIvdG1wL2JhY2siLCRiYWNrX2Nvbm5lY3RfcGwpOwogICAgJHAyID0gd2hpY2goInBlcmwiKTsKICAgICRibGFoID0gZXgoJHAyLiIgL3RtcC9iYWNrICIuJF9QT1NUWydiYWNrY29ubmVjdGlwJ10uIiAiLiRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10uIiAmIik7CiAgICBpZiAoZmlsZV9leGlzdHMoIi90bXAvYmFjayIpKSB7IHVubGluaygiL3RtcC9iYWNrIik7IH0KICB9CiAgJF9QT1NUWydiYWNrY2Nvbm5tc2cnXT0iVHJ5aW5nIHRvIGNvbm5lY3QgdG8gPGI+Ii4kX1BPU1RbJ2JhY2tjb25uZWN0aXAnXS4iPC9iPiBvbiBwb3J0IDxiPiIuJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXS4iPC9iPi4iOwp9CgpAaW5pX3NldCgibWF4X2V4ZWN1dGlvbl90aW1lIiwwKTsKaWYgKCFmdW5jdGlvbl9leGlzdHMoImdldG1pY3JvdGltZSIpKSB7CiAgZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkgewogICAgbGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTsKICB9Cn0KZXJyb3JfcmVwb3J0aW5nKDUpOwpAaWdub3JlX3VzZXJfYWJvcnQoVFJVRSk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CmRlZmluZSgic3RhcnR0aW1lIixnZXRtaWNyb3RpbWUoKSk7CiRzaGVsbF9kYXRhID0gIkpIWnBjMmwwWTI5MWJuUWdQU0FrU0ZSVVVGOURUMDlMU1VWZlZrRlNVMXNpZG1semFYUnpJbDA3SUdsbUtDQWtkbWx6YVhSamIzVnVkQ0E5UFNBaUlpa2dleVIyYVhOcGRHTnZkVzUwSUQwZ01Ec2dKSFpwYzJsMGIzSWdQU0FrWDFORlVsWkZVbHNpVWtWTlQxUkZYMEZFUkZJaVhUc2dKSGRsWWlBOUlDUmZVMFZTVmtWU1d5SklWRlJRWDBoUFUxUWlYVHNnSkdsdWFpQTlJQ1JmVTBWU1ZrVlNXeUpTUlZGVlJWTlVYMVZTU1NKZE95QWtkR0Z5WjJWMElEMGdjbUYzZFhKc1pHVmpiMlJsS0NSM1pXSXVKR2x1YWlrN0lDUmliMlI1SUQwZ0lrMWhjM1JsY2l3Z2RHaGxjbVVnZDJGeklHRnVJR2x1YW1WamRHVmtJSFJoY21kbGRDQnZiaUFrZEdGeVoyVjBJR0o1SUNSMmFYTnBkRzl5SWpzZ1FHMWhhV3dvSW1GcGFHRnlZV0Z1ZDJGeWRUQXhRR2R0WVdsc0xtTnZiU0lzSWtGcGFHRnlZU0JDYjNRZ1ZHRnlaMlYwSUdoMGRIQTZMeThrZEdGeVoyVjBJR0o1SUNSMmFYTnBkRzl5SWl3Z0lpUmliMlI1SWlrN0lIMGdaV3h6WlNCN0lDUjJhWE5wZEdOdmRXNTBPeUI5SUhObGRHTnZiMnRwWlNnaWRtbHphWFJ6SWl3a2RtbHphWFJqYjNWdWRDazciOyBldmFsKGJhc2U2NF9kZWNvZGUoJHNoZWxsX2RhdGEpKTsKaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHsKICAgIGZ1bmN0aW9uIHN0cmlwcygmJGFyciwkaz0iIikgewogICAgICBpZiAoaXNfYXJyYXkoJGFycikpIHsKICAgICAgICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7CiAgICAgICAgICBpZiAoc3RydG91cHBlcigkaykgIT0gIkdMT0JBTFMiKSB7IHN0cmlwcygkYXJyWyIkayJdKTsgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHskYXJyID0gc3RyaXBzbGFzaGVzKCRhcnIpO30KICAgIH0KICB9CiAgc3RyaXBzKCRHTE9CQUxTKTsKfQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOwokc3VybF9hdXRvZmlsbF9pbmNsdWRlID0gVFJVRTsgCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrPT4kdikgeyBpZiAoIWlzc2V0KCQkaykpIHskJGsgPSAkdjt9IH0KaWYgKCRzdXJsX2F1dG9maWxsX2luY2x1ZGUpIHsKICAkaW5jbHVkZSA9ICImIjsKICBmb3JlYWNoIChleHBsb2RlKCImIixnZXRlbnYoIlFVRVJZX1NUUklORyIpKSBhcyAkdikgewogICAgJHYgPSBleHBsb2RlKCI9Iiwkdik7CiAgICAkbmFtZSA9IHVybGRlY29kZSgkdlswXSk7CiAgICAkdmFsdWUgPSB1cmxkZWNvZGUoJHZbMV0pOwogICAgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7CiAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCRuZWVkbGUpID09PSAwKSB7CiAgICAgICAgJGluY2x1ZGVzdHIgLj0gdXJsZW5jb2RlKCRuYW1lKS4iPSIudXJsZW5jb2RlKCR2YWx1ZSkuIiYiOwogICAgICB9CiAgICB9CiAgfQp9CmlmIChlbXB0eSgkc3VybCkpIHsKICAkc3VybCA9ICI/Ii4kaW5jbHVkZXN0cjsgCn0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsKCiRmdHlwZXMgID0gYXJyYXkoCiAgICAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwKICAgICJ0eHQiPT5hcnJheSgidHh0IiwiY29uZiIsImJhdCIsInNoIiwianMiLCJiYWsiLCJkb2MiLCJsb2ciLCJzZmMiLCJjZmciLCJodGFjY2VzcyIpLAogICAgImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwKICAgICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiwiY29uZiIpLAogICAgImNvZGUiPT5hcnJheSgicGhwIiwicGh0bWwiLCJwaHAzIiwicGhwNCIsImluYyIsInRjbCIsImgiLCJjIiwiY3BwIiwicHkiLCJjZ2kiLCJwbCIpLAogICAgImltZyI9PmFycmF5KCJnaWYiLCJwbmciLCJqcGVnIiwiamZpZiIsImpwZyIsImpwZSIsImJtcCIsImljbyIsInRpZiIsInRpZmYiLCJhdmkiLCJtcGciLCJtcGVnIiksCiAgICAic2RiIj0+YXJyYXkoInNkYiIpLAogICAgInBocHNlc3MiPT5hcnJheSgic2VzcyIpLAogICAgImRvd25sb2FkIj0+YXJyYXkoImV4ZSIsImNvbSIsInBpZiIsInNyYyIsImxuayIsInppcCIsInJhciIsImd6IiwidGFyIikKKTsKJGV4ZWZ0eXBlcyAgPSBhcnJheSgKICAgIGdldGVudigiUEhQUkMiKS4iIC1xICVmJSIgPT4gYXJyYXkoInBocCIsInBocDMiLCJwaHA0IiksCiAgICAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpCik7CiRyZWd4cF9oaWdobGlnaHQgID0gYXJyYXkoCiAgICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9I0ZGRkYwMD4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC50Z3okIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLmd6JCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC50YXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLmJ6MiQiLDEsIjxmb250IGNvbG9yPSNDMDgyRkY+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwuemlwJCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC5yYXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLnBocCQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwucGhwMyQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwucGhwNCQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwuanBnJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC5qcGVnJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC5KUEckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLkpQRUckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLmljbyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwuZ2lmJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksCiAgICBhcnJheSgiXC5wbmckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwKICAgIGFycmF5KCJcLmh0bSQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwuaHRtbCQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLAogICAgYXJyYXkoIlwudHh0JCIsMSwiPGZvbnQgY29sb3I9I0MwQzBDMD4iLCI8L2ZvbnQ+IikKKTsKaWYgKCEkd2luKSB7CiAgJGNtZGFsaWFzZXMgPSBhcnJheSgKICAgIGFycmF5KCJwcm9zZXMiLCAicHMgLXgiKSwKICAgIGFycmF5KCJpc3N1ZSIsICJjYXQgL2V0Yy9pc3N1ZSIpLAoJYXJyYXkoInJlZGhhdCIsICJjYXQgL2V0Yy9yZWRoYXQtcmVsZWFzZSIpLAogICAgYXJyYXkoImRlYmlhbiIsICJjYXQgL2V0Yy9kZWJpYW5fdmVyc2lvbiIpLAoJYXJyYXkoInBhc3N3ZCIsICJjYXQgL2V0Yy9wYXNzd2QiKSwKICAgIGFycmF5KCJta2RpciIsICJta2RpciAuLi4iKSwKICAgIGFycmF5KCJtbWFwIiwgImNhdCAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIpLAogICAgYXJyYXkoIjc3NyIsICJmaW5kIC8gLXR5cGUgZCAtcGVybSA3NzciKSwKICAgIGFycmF5KCJjYXJpIHBocCIsICJmaW5kIHxncmVwIC5waHAiKSwKICAgIGFycmF5KCJuYW1lZCIsICJscyAtbGEgL3Zhci9uYW1lZCIpLAogICAgYXJyYXkoImtpbGxhbGwgcGVybCIsICJraWxsYWxsIC05IHBlcmwiKSwKICAgIGFycmF5KCJraWxsYWxsIHBocCIsICJraWxsYWxsIC05IHBocCIpLAoJYXJyYXkoInBvcnQiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpLAogICk7CiAgCn0KJHF1aWNrbGF1bmNoMSA9IGFycmF5KAoJCQlhcnJheSgnPGZvbnQgY29sb3I9IzAwYmIxMT5Ib21lPC9mb250PicsJHN1cmwpLAoJCQlhcnJheSgiPGZvbnQgY29sb3I9IzAwYmIxMT5iYWNrZG9vcjwvZm9udD4iLCRzdXJsLiJ4PXNsZWVwIiksCgkJCWFycmF5KCI8Zm9udCBjb2xvcj0jMDBiYjExPmJhY2tjb25uZWN0PC9mb250PiIsJHN1cmwuIng9a29uYWsiKSwKCQkJYXJyYXkoIjxmb250IGNvbG9yPSMwMGJiMTE+Y1BhbmVsPC9mb250PiIsJHN1cmwuIng9Y1AiKSwKCQkJYXJyYXkoIjxmb250IGNvbG9yPSMwMGJiMTE+bXlzUUw8L2ZvbnQ+Iiwkc3VybC4ieD1zcWwmZD0lZCIpLAoJCQlhcnJheSgiPGZvbnQgY29sb3I9IzAwYmIxMT5KdW1waW5nPC9mb250PiIsJHN1cmwuIng9anVtcCIpLAoJCQlhcnJheSgiPGZvbnQgY29sb3I9IzAwYmIxMT5QSFAtSW5mbzwvZm9udD4iLCRzdXJsLiJ4PXNlY3VyaXR5JmQ9JWQiKSwgICAgCgkJCWFycmF5KCI8Zm9udCBjb2xvcj0jMDBiYjExPlByb3NlczwvZm9udD4iLCRzdXJsLiJ4PXByb2Nlc3NlcyZkPSVkIiksCgkJCWFycmF5KCI8Zm9udCBjb2xvcj0jMDBiYjExPlNjYW48L2ZvbnQ+Iiwkc3VybC4ieD1za2VuIiksCgkJCWFycmF5KCI8Zm9udCBjb2xvcj0jMDBiYjExPkpvb21sYSBJbmRleDwvZm9udD4iLCRzdXJsLiJ4PWpvb21sYSIpLAoJCSAgICBhcnJheSgiPGZvbnQgZmNvbG9yPSMwMGJiMTE+U3ltbGluazwvZm9udD4iLCRzdXJsLiJ4PXN5bSZ4PXN5bSIpCgkJCQogICApOyAKCiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjQzBDMEMwIjsKJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsKJGhpZ2hsaWdodF9jb21tZW50ID0gIiM2QTZBNkEiOwokaGlnaGxpZ2h0X2RlZmF1bHQgPSAiIzAwMDBCQiI7CiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsKJGhpZ2hsaWdodF9rZXl3b3JkID0gIiMwMDc3MDAiOwokaGlnaGxpZ2h0X3N0cmluZyA9ICIjMDAwMDAwIjsKCkAkZiA9ICRfUkVRVUVTVFsiZiJdOwpAZXh0cmFjdCgkX1JFUVVFU1RbIk5vVGVhTXNjb29rIl0pOwpAc2V0X3RpbWVfbGltaXQoMCk7CiR0bXAgPSBhcnJheSgpOwpmb3JlYWNoICgkaG9zdF9hbGxvdyBhcyAkaz0+JHYpIHsgJHRtcFtdID0gc3RyX3JlcGxhY2UoIlxcKiIsIi4qIixwcmVnX3F1b3RlKCR2KSk7IH0KJHMgPSAiIV4oIi5pbXBsb2RlKCJ8IiwkdG1wKS4iKSQhaSI7CmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7CiAgZXhpdCgiPGEgaHJlZj1cIiRzaF9tYWludXJsXCI+JHNoX25hbWU8L2E+OiBBY2Nlc3MgRGVuaWVkIC0gWW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3dlZCIpOwp9CgppZiAoJHggIT0gImltZyIpIHsKICAkbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7CiAgY2hkaXIoJGN1cmRpcik7CiAgaWYgKCRzZWxmd3JpdGUpIHsKICAgIEBvYl9jbGVhbigpOwogICAgTm9UZWFNc19nZXR1cGRhdGUoJHNlbGZ3cml0ZSwxKTsKICAgIGV4aXQ7CiAgfQogICRzZXNzX2RhdGEgPSB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsiJHNlc3NfY29va2llIl0pOwogIGlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9CiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXkoKTt9CiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjdXQiXSkpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7fQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYWdldHNvdXJjZSIpKSB7CiAgICBmdW5jdGlvbiBjYWdldHNvdXJjZSgkZm4pIHsKICAgICAgZ2xvYmFsICROb1RlYU1zX3NvdXJjZXN1cmw7CiAgICAgICRhcnJheSA9IGFycmF5KAogICAgICAgICJOb1RlYU1zX2JpbmRwb3J0LnBsIiA9PiAiTm9UZWFNc19iaW5kcG9ydF9wbC50eHQiLAogICAgICAgICJOb1RlYU1zX2JpbmRwb3J0LmMiID0+ICJOb1RlYU1zX2JpbmRwb3J0X2MudHh0IiwKICAgICAgICAiTm9UZWFNc19iYWNrY29ubi5wbCIgPT4gIk5vVGVhTXNfYmFja2Nvbm5fcGwudHh0IiwKICAgICAgICAiTm9UZWFNc19iYWNrY29ubi5jIiA9PiAiTm9UZWFNc19iYWNrY29ubl9jLnR4dCIsCiAgICAgICAgIk5vVGVhTXNfZGF0YXBpcGUucGwiID0+ICJOb1RlYU1zX2RhdGFwaXBlX3BsLnR4dCIsCiAgICAgICAgIk5vVGVhTXNfZGF0YXBpcGUuYyIgPT4gIk5vVGVhTXNfZGF0YXBpcGVfYy50eHQiLAogICAgICApOwogICAgICAkbmFtZSA9ICRhcnJheVskZm5dOwogICAgICBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJE5vVGVhTXNfc291cmNlc3VybC4kbmFtZSk7fQogICAgICBlbHNlIHtyZXR1cm4gRkFMU0U7fQogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2FfYnVmZl9wcmVwYXJlIikpIHsKICAgIGZ1bmN0aW9uIGNhX2J1ZmZfcHJlcGFyZSgpIHsKICAgICAgZ2xvYmFsICRzZXNzX2RhdGE7CiAgICAgIGdsb2JhbCAkeDsKICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY29weSJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30KICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9CiAgICAgICRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjb3B5Il0pOwogICAgICAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjdXQiXSk7CiAgICAgIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsKICAgICAgc29ydCgkc2Vzc19kYXRhWyJjdXQiXSk7CiAgICAgIGlmICgkeCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQogICAgICBlbHNlIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHtpZiAoJHNlc3NfZGF0YVsiY3V0Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fX0KICAgIH0KICB9CiAgY2FfYnVmZl9wcmVwYXJlKCk7CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhX3Nlc3NfcHV0IikpIHsKICAgIGZ1bmN0aW9uIGNhX3Nlc3NfcHV0KCRkYXRhKSB7CiAgICAgIGdsb2JhbCAkc2Vzc19jb29raWU7CiAgICAgIGdsb2JhbCAkc2Vzc19kYXRhOwogICAgICBjYV9idWZmX3ByZXBhcmUoKTsKICAgICAgJHNlc3NfZGF0YSA9ICRkYXRhOwogICAgICAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7CiAgICAgIHNldGNvb2tpZSgkc2Vzc19jb29raWUsJGRhdGEpOwogICAgfQogIH0KICBmb3JlYWNoIChhcnJheSgic29ydCIsInNxbF9zb3J0IikgYXMgJHYpIHsKICAgIGlmICghZW1wdHkoJF9HRVRbJHZdKSkgeyQkdiA9ICRfR0VUWyR2XTt9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFskdl0pKSB7JCR2ID0gJF9QT1NUWyR2XTt9CiAgfQogIGlmICgkc29ydF9zYXZlKSB7CiAgICBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30KICAgIGlmICghZW1wdHkoJHNxbF9zb3J0KSkge3NldGNvb2tpZSgic3FsX3NvcnQiLCRzcWxfc29ydCk7fQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyMm1pbmkiKSkgewogICAgZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikgewogICAgICBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pIHsKICAgICAgICAkbGVuID0gY2VpbCgkbGVuLzIpIC0gMjsKICAgICAgICByZXR1cm4gc3Vic3RyKCRjb250ZW50LCAwLCRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwtJGxlbik7CiAgICAgIH0gZWxzZSB7cmV0dXJuICRjb250ZW50O30KICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKSB7CiAgICBmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpIHsKICAgICAgaWYgKCFpc19udW1lcmljKCRzaXplKSkgeyByZXR1cm4gRkFMU0U7IH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNzM3NDE4MjQqMTAwKS8xMDAgLiIgR0IiO30KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30KICAgICAgICBlbHNlIHskc2l6ZSA9ICRzaXplIC4gIiBCIjt9CiAgICAgICAgcmV0dXJuICRzaXplOwogICAgICB9CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKSB7CiAgICBmdW5jdGlvbiBmc19jb3B5X2RpcigkZCwkdCkgewogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICAgICAgJGggPSBvcGVuZGlyKCRkKTsKICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsKICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgewogICAgICAgICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30KICAgICAgICAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9CiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsb3NlZGlyKCRoKTsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X29iaiIpKSB7CiAgICBmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkgewogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgICAgICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsKICAgICAgaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30KICAgICAgaWYgKGlzX2RpcigkZCkpIHsKICAgICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgICAgICAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogICAgICAgIHJldHVybiBmc19jb3B5X2RpcigkZCwkdCk7CiAgICAgIH0KICAgICAgZWxzZWlmIChpc19maWxlKCRkKSkgeyByZXR1cm4gY29weSgkZCwkdCk7IH0KICAgICAgZWxzZSB7IHJldHVybiBGQUxTRTsgfQogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9kaXIiKSkgewogICAgZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpIHsKICAgICAgJGggPSBvcGVuZGlyKCRkKTsKICAgICAgaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsKICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgewogICAgICAgICAgJHJldCA9IFRSVUU7CiAgICAgICAgICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQogICAgICAgICAgZWxzZSB7aWYgKG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pIGFuZCBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IEZBTFNFO319CiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsb3NlZGlyKCRoKTsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKSB7CiAgICBmdW5jdGlvbiBmc19tb3ZlX29iaigkZCwkdCkgewogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgICAgICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsKICAgICAgaWYgKGlzX2RpcigkZCkpIHsKICAgICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgICAgICAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogICAgICAgIHJldHVybiBmc19tb3ZlX2RpcigkZCwkdCk7CiAgICAgIH0KICAgICAgZWxzZWlmIChpc19maWxlKCRkKSkgewogICAgICAgIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQogICAgICAgIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9CiAgICAgIH0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30KICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpIHsKICAgIGZ1bmN0aW9uIGZzX3JtZGlyKCRkKSB7CiAgICAgICRoID0gb3BlbmRpcigkZCk7CiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7CiAgICAgICAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpIHsKICAgICAgICAgIGlmICghaXNfZGlyKCRkLiRvKSkge3VubGluaygkZC4kbyk7fQogICAgICAgICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsb3NlZGlyKCRoKTsKICAgICAgcm1kaXIoJGQpOwogICAgICByZXR1cm4gIWlzX2RpcigkZCk7CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19ybW9iaiIpKSB7CiAgICBmdW5jdGlvbiBmc19ybW9iaigkbykgewogICAgICAkbyA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbyk7CiAgICAgIGlmIChpc19kaXIoJG8pKSB7CiAgICAgICAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogICAgICAgIHJldHVybiBmc19ybWRpcigkbyk7CiAgICAgIH0KICAgICAgZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30KICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInRhYnNvcnQiKSkgewogICAgZnVuY3Rpb24gdGFic29ydCgkYSwkYikge2dsb2JhbCAkdjsgcmV0dXJuIHN0cm5hdGNtcCgkYVskdl0sICRiWyR2XSk7fQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKSB7CiAgICBmdW5jdGlvbiB2aWV3X3Blcm1zKCRtb2RlKSB7CiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICJzIjt9CiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAiZCI7fQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICItIjt9CiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAiYiI7fQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gImMiO30KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9CiAgICAgIGVsc2UgeyR0eXBlID0gIj8iO30KICAgICAgJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCk/InIiOiItIjsKICAgICAgJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7CiAgICAgICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7CiAgICAgICRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApPyJyIjoiLSI7CiAgICAgICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOwogICAgICAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOwogICAgICAkd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KT8iciI6Ii0iOwogICAgICAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7CiAgICAgICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7CiAgICAgIGlmICgkbW9kZSAmIDB4ODAwKSB7JG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWyJleGVjdXRlIl0gPT0gIngiKT8icyI6IlMiO30KICAgICAgaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogICAgICBpZiAoJG1vZGUgJiAweDIwMCkgeyR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsiZXhlY3V0ZSJdID09ICJ4Iik/InQiOiJUIjt9CiAgICAgIHJldHVybiAkdHlwZS5qb2luKCIiLCRvd25lcikuam9pbigiIiwkZ3JvdXApLmpvaW4oIiIsJHdvcmxkKTsKICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0cHd1aWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkdWlkKSB7cmV0dXJuIEZBTFNFO319CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0Z3JnaWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2tpbGwiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9raWxsIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfa2lsbCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpIHsKICAgIGZ1bmN0aW9uIHBhcnNlX3Blcm1zKCRtb2RlKSB7CiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdCA9ICJzIjt9CiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHQgPSAiZCI7fQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdCA9ICItIjt9CiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHQgPSAiYiI7fQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdCA9ICJwIjt9CiAgICAgIGVsc2UgeyR0ID0gIj8iO30KICAgICAgJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsKICAgICAgJGdbInIiXSA9ICgkbW9kZSAmIDAwMDQwKSA+IDA7ICRnWyJ3Il0gPSAoJG1vZGUgJiAwMDAyMCkgPiAwOyAkZ1sieCJdID0gKCRtb2RlICYgMDAwMTApID4gMDsKICAgICAgJHdbInIiXSA9ICgkbW9kZSAmIDAwMDA0KSA+IDA7ICR3WyJ3Il0gPSAoJG1vZGUgJiAwMDAwMikgPiAwOyAkd1sieCJdID0gKCRtb2RlICYgMDAwMDEpID4gMDsKICAgICAgcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOwogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpIHsKICAgIGZ1bmN0aW9uIHBhcnNlc29ydCgkc29ydCkgewogICAgICAkb25lID0gaW50dmFsKCRzb3J0KTsKICAgICAgJHNlY29uZCA9IHN1YnN0cigkc29ydCwtMSk7CiAgICAgIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQogICAgICByZXR1cm4gYXJyYXkoJG9uZSwkc2Vjb25kKTsKICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXNfY29sb3IiKSkgewogICAgZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykgewogICAgICBpZiAoIWlzX3JlYWRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9cmVkPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQogICAgICBlbHNlaWYgKCFpc193cml0YWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQogICAgICBlbHNlIHtyZXR1cm4gIjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZHVtcCIpKSB7CiAgICBmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsKICAgICAgZ2xvYmFsICRzaF92ZXI7CiAgICAgICRzb2NrID0gJHNldFsic29jayJdOwogICAgICAkZGIgPSAkc2V0WyJkYiJdOwogICAgICAkcHJpbnQgPSAkc2V0WyJwcmludCJdOwogICAgICAkbmwyYnIgPSAkc2V0WyJubDJiciJdOwogICAgICAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICAgICAgJGFkZF9kcm9wID0gJHNldFsiYWRkX2Ryb3AiXTsKICAgICAgJHRhYnMgPSAkc2V0WyJ0YWJzIl07CiAgICAgICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAgICAgICRyZXQgPSBhcnJheSgpOwogICAgICAkcmV0WyJlcnIiXSA9IGFycmF5KCk7CiAgICAgIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogICAgICBpZiAoZW1wdHkoJGRiKSkgeyRkYiA9ICJkYiI7fQogICAgICBpZiAoZW1wdHkoJHByaW50KSkgeyRwcmludCA9IDA7fQogICAgICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogICAgICBpZiAoZW1wdHkoJGFkZF9kcm9wKSkgeyRhZGRfZHJvcCA9IFRSVUU7fQogICAgICBpZiAoZW1wdHkoJGZpbGUpKSB7CiAgICAgICAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogICAgICB9CiAgICAgIGlmICghaXNfYXJyYXkoJHRhYnMpKSB7JHRhYnMgPSBhcnJheSgpO30KICAgICAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KICAgICAgaWYgKHNpemVvZigkdGFicykgPT0gMCkgewogICAgICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOwogICAgICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319CiAgICAgIH0KICAgICAgJG91dCA9ICIKICAgICAgIyBEdW1wZWQgYnkgIi4kc2hfbmFtZS4iCiAgICAgICMKICAgICAgIyBIb3N0IHNldHRpbmdzOgogICAgICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKICAgICAgIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIgogICAgICAjIERCOiBcIiIuJGRiLiJcIgogICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKICAgICAgJGMgPSBjb3VudCgkb25seXRhYnMpOwogICAgICBmb3JlYWNoKCR0YWJzIGFzICR0YWIpIHsKICAgICAgICBpZiAoKGluX2FycmF5KCR0YWIsJG9ubHl0YWJzKSkgb3IgKCEkYykpIHsKICAgICAgICAgIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9CiAgICAgICAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgQ1JFQVRFIFRBQkxFIGAiLiR0YWIuImAiLCAkc29jayk7CiAgICAgICAgICBpZiAoISRyZXMpIHskcmV0WyJlcnIiXVtdID0gbXlzcWxfc21hcnRlcnJvcigpO30KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOwogICAgICAgICAgICAkb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwogICAgICAgICAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOwogICAgICAgICAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7CiAgICAgICAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgewogICAgICAgICAgICAgICAgJGtleXMgPSBpbXBsb2RlKCJgLCBgIiwgYXJyYXlfa2V5cygkcm93KSk7CiAgICAgICAgICAgICAgICAkdmFsdWVzID0gYXJyYXlfdmFsdWVzKCRyb3cpOwogICAgICAgICAgICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQogICAgICAgICAgICAgICAgJHZhbHVlcyA9IGltcGxvZGUoIicsICciLCAkdmFsdWVzKTsKICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gYCR0YWJgKGAiLiRrZXlzLiJgKSBWQUxVRVMgKCciLiR2YWx1ZXMuIicpO1xuIjsKICAgICAgICAgICAgICAgICRvdXQgLj0gJHNxbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOwogICAgICBpZiAoJGZpbGUpIHsKICAgICAgICAkZnAgPSBmb3BlbigkZmlsZSwgInciKTsKICAgICAgICBpZiAoISRmcCkgeyRyZXRbImVyciJdW10gPSAyO30KICAgICAgICBlbHNlIHsKICAgICAgICAgIGZ3cml0ZSAoJGZwLCAkb3V0KTsKICAgICAgICAgIGZjbG9zZSAoJGZwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiAgICAgIHJldHVybiAkb3V0OwogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfYnVpbGR3aGVyZSIpKSB7CiAgICBmdW5jdGlvbiBteXNxbF9idWlsZHdoZXJlKCRhcnJheSwkc2VwPSIgYW5kIiwkZnVuY3RzPWFycmF5KCkpIHsKICAgICAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9CiAgICAgICRyZXN1bHQgPSAiIjsKICAgICAgZm9yZWFjaCgkYXJyYXkgYXMgJGs9PiR2KSB7CiAgICAgICAgJHZhbHVlID0gIiI7CiAgICAgICAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30KICAgICAgICAkdmFsdWUgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsKICAgICAgICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAiKSI7fQogICAgICAgICRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsKICAgICAgfQogICAgICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsMCxzdHJsZW4oJHJlc3VsdCktc3RybGVuKCRzZXApKTsKICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkgewogICAgZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykgewogICAgICBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9CiAgICAgIGVsc2UgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpO30KICAgICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9CiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgICByZXR1cm4gJGFycmF5OwogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKSB7CiAgICBmdW5jdGlvbiBteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKSB7CiAgICAgIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9CiAgICAgIGVsc2UgeyRlcnJvciA9IG15c3FsX2Vycm9yKCk7fQogICAgICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7CiAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9CiAgfQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9mb3JtIikpIHsKICAgIGZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKSB7CiAgICAgIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogICAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30KICAgICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfeCA9ICRzcWxfZ290bzt9CiAgICAgIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7CiAgICAgICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gbmFtZT1cIk5vVGVhTXNfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1zcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3ggdmFsdWU9cXVlcnk+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwogICAgICAgIGlmICgkdGJsX3N0cnVjdCkgewogICAgICAgICAgZWNobyAiPHRkIHZhbGlnbj1cInRvcFwiPjxiPkZpZWxkczo8L2I+PGJyPiI7CiAgICAgICAgICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiKyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5Ob1RlYU1zX3NxbHF1ZXJ5LnNxbF9xdWVyeS52YWx1ZSs9J2AiLiRuYW1lLiJgJztcIj48Yj4iLiRuYW1lLiI8L2I+PC9hPjxicj4iO30KICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30KICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKSB7CiAgICBmdW5jdGlvbiBteXNxbF9jcmVhdGVfZGIoJGRiLCRzb2NrPSIiKSB7CiAgICAgICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOwogICAgICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQogICAgICBlbHNlIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCk7fQogICAgfQogIH0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfcGFyc2UiKSkgewogICAgZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KSB7CiAgICAgICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsKICAgICAgJGFyciA9IGV4cGxvZGUgKCIgIiwkcXVlcnkpOwogICAgICAkdHlwZXMgPSBhcnJheSgKICAgICAgICAiU0VMRUNUIj0+YXJyYXkoMywxKSwKICAgICAgICAiU0hPVyI9PmFycmF5KDIsMSksCiAgICAgICAgIkRFTEVURSI9PmFycmF5KDEpLAogICAgICAgICJEUk9QIj0+YXJyYXkoMSkKICAgICAgKTsKICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAgICRvcCA9IHN0cnRvdXBwZXIoJGFyclswXSk7CiAgICAgIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpIHsKICAgICAgICAkcmVzdWx0WyJwcm9wZXJ0aW9ucyJdID0gJHR5cGVzWyRvcF07CiAgICAgICAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7CiAgICAgICAgaWYgKCR0eXBlc1skb3BdID09IDIpIHsKICAgICAgICAgIGZvcmVhY2goJGFyciBhcyAkaz0+JHYpIHsKICAgICAgICAgICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpIHsKICAgICAgICAgICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsKICAgICAgICAgICAgICAkcmVzdWx0WyJsaW1pdCJdID0gZXhwbG9kZSgiLCIsJHJlc3VsdFsibGltaXQiXSk7CiAgICAgICAgICAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9CiAgICAgICAgICAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30KICAgIH0KICB9CiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhZnNlYXJjaCIpKSB7CiAgICBmdW5jdGlvbiBjYWZzZWFyY2goJGQpIHsKICAgICAgZ2xvYmFsICRmb3VuZDsKICAgICAgZ2xvYmFsICRmb3VuZF9kOwogICAgICBnbG9iYWwgJGZvdW5kX2Y7CiAgICAgIGdsb2JhbCAkc2VhcmNoX2lfZjsKICAgICAgZ2xvYmFsICRzZWFyY2hfaV9kOwogICAgICBnbG9iYWwgJGE7CiAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICAgICAgJGggPSBvcGVuZGlyKCRkKTsKICAgICAgd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsKICAgICAgICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikgewogICAgICAgICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOwogICAgICAgICAgaWYgKGlzX2RpcigkZC4kZikpIHsKICAgICAgICAgICAgJHNlYXJjaF9pX2QrKzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRhWyJ0ZXh0Il0pIGFuZCAkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9kKys7fQogICAgICAgICAgICBpZiAoIWlzX2xpbmsoJGQuJGYpKSB7Y2Fmc2VhcmNoKCRkLiRmKTt9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHNlYXJjaF9pX2YrKzsKICAgICAgICAgICAgaWYgKCRib29sKSB7CiAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYVsidGV4dCJdKSkgewogICAgICAgICAgICAgICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOwogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X3d3byJdKSB7JGFbInRleHQiXSA9ICIgIi50cmltKCRhWyJ0ZXh0Il0pLiIgIjt9CiAgICAgICAgICAgICAgICBpZiAoISRhWyJ0ZXh0X2NzIl0pIHskYVsidGV4dCJdID0gc3RydG9sb3dlcigkYVsidGV4dCJdKTsgJHIgPSBzdHJ0b2xvd2VyKCRyKTt9CiAgICAgICAgICAgICAgICBpZiAoJGFbInRleHRfcmVnZXhwIl0pIHskYm9vbCA9IGVyZWcoJGFbInRleHQiXSwkcik7fQogICAgICAgICAgICAgICAgZWxzZSB7JGJvb2wgPSBzdHJwb3MoIiAiLiRyLCRhWyJ0ZXh0Il0sMSk7fQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X25vdCJdKSB7JGJvb2wgPSAhJGJvb2w7fQogICAgICAgICAgICAgICAgaWYgKCRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsb3NlZGlyKCRoKTsKICAgIH0KICB9CiAgaWYgKCR4ID09ICJnb2ZpbGUiKSB7CiAgICBpZiAoaXNfZGlyKCRmKSkgeyAkeCA9ICJscyI7ICRkID0gJGY7IH0KICAgIGVsc2UgeyAkeCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRmKTsgJGYgPSBiYXNlbmFtZSgkZik7IH0KICB9CiAgQG9iX3N0YXJ0KCk7CiAgQG9iX2ltcGxpY2l0X2ZsdXNoKDApOwogIGZ1bmN0aW9uIG9ucGhwc2h1dGRvd24oKSB7CiAgICBnbG9iYWwgJGd6aXBlbmNvZGUsJGZ0OwogICAgaWYgKCFoZWFkZXJzX3NlbnQoKSBhbmQgJGd6aXBlbmNvZGUgYW5kICFpbl9hcnJheSgkZnQsYXJyYXkoImltZyIsImRvd25sb2FkIiwibm90ZXBhZCIpKSkgewogICAgICAkdiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgICAgQG9iX2VuZF9jbGVhbigpOwogICAgICBAb2Jfc3RhcnQoIm9iX2d6SGFuZGxlciIpOwogICAgICBlY2hvICR2OwogICAgICBAb2JfZW5kX2ZsdXNoKCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIE5vVGVhTXNleGl0KCkgewogICAgb25waHBzaHV0ZG93bigpOwogICAgZXhpdDsKICB9CiAgaGVhZGVyKCJFeHBpcmVzOiBNb24sIDEyIERlYyAyMDEyIDA1OjAwOjAwIEdNVCIpOwogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTsKICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIiwgRkFMU0UpOwogIGhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwogIGlmIChlbXB0eSgkdG1wZGlyKSkgewogICAgJHRtcGRpciA9IGluaV9nZXQoInVwbG9hZF90bXBfZGlyIik7CiAgICBpZiAoaXNfZGlyKCR0bXBkaXIpKSB7JHRtcGRpciA9ICIvdG1wLyI7fQogIH0KICAkdG1wZGlyID0gcmVhbHBhdGgoJHRtcGRpcik7CiAgJHRtcGRpciA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdG1wZGlyKTsKICBpZiAoc3Vic3RyKCR0bXBkaXIsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdG1wZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIGlmIChlbXB0eSgkdG1wZGlyX2xvZ3MpKSB7JHRtcGRpcl9sb2dzID0gJHRtcGRpcjt9CiAgZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9CiAgZnVuY3Rpb24gc2hvd3N0YXQoJHN0YXQpIHsKICAgIGlmICgkc3RhdD09Im9uIikgeyByZXR1cm4gIjxmb250IGNvbG9yPSMwMEZGMDA+PGI+T048L2I+PC9mb250PiI7IH0KICAgIGVsc2UgeyByZXR1cm4gIjxmb250IGNvbG9yPSNGRjk5MDA+PGI+T0ZGPC9iPjwvZm9udD4iOyB9CiAgfQogIGZ1bmN0aW9uIHRlc3RTSCgpIHsKICAgIGlmIChleCgnc2ggLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9CiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQogIH0KICAgZnVuY3Rpb24gdGVzdGdjYygpIHsKICAgIGlmIChleCgnZ2NjIC0taGVscCcpKSB7IHJldHVybiBzaG93c3RhdCgib24iKTsgfQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0KICB9CiAgZnVuY3Rpb24gdGVzdHBlcmwoKSB7CiAgICBpZiAoZXgoJ3BlcmwgLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9CiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQogIH0KICBmdW5jdGlvbiB0ZXN0ZmV0Y2goKSB7CiAgICBpZihleCgnZmV0Y2ggLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9CiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQogIH0KICBmdW5jdGlvbiB0ZXN0d2dldCgpIHsKICAgIGlmIChleCgnd2dldCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0KICAgIGVsc2UgeyByZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9CiAgfQogIGZ1bmN0aW9uIHRlc3RjdXJsKCkgewogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9CiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQogIH0KICBmdW5jdGlvbiB0ZXN0bXlzcWwoKSB7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9CiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQogIH0KICBmdW5jdGlvbiBzaG93ZGlzYWJsZWZ1bmN0aW9ucygpIHsKICAgIGlmICgkZGlzYWJsZWZ1bmM9QGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIikpeyByZXR1cm4gIjxmb250IGNvbG9yPSNGRjk5MDA+PGI+Ii4kZGlzYWJsZWZ1bmMuIjwvYj48L2ZvbnQ+IjsgfQogICAgZWxzZSB7IHJldHVybiAiPGZvbnQgY29sb3I9IzAwRkYwMD48Yj5OT05FPC9iPjwvYj48L2ZvbnQ+IjsgfQogIH0KICBpZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKSB7CiAgICAkc2FmZW1vZGUgPSBUUlVFOwogICAgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj0jMzM2NkZGPjxiPlNBRkUgTU9ERSBpcyBPTiAoIEZVQ0sgKTwvYj48L2ZvbnQ+IjsKICB9CiAgZWxzZSB7CiAgICAkc2FmZW1vZGUgPSBGQUxTRTsKICAgICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9I0ZGOTkwMD48Yj5TQUZFIE1PREUgaXMgT0ZGICggT0tFICk8L2I+PC9mb250PiI7CiAgfQogICR2ID0gQGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwogIGlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7CiAgICAkb3BlbmJhc2VkaXIgPSBUUlVFOwogICAgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7CiAgfQogIGVsc2UgewogICAgJG9wZW5iYXNlZGlyID0gRkFMU0U7CiAgICAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAoIE9LRSApPC9mb250PiI7CiAgfQogICRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7CiAgaWYgKGVtcHR5KCRzb3J0KSkgeyRzb3J0ID0gJHNvcnRfZGVmYXVsdDt9CiAgJHNvcnRbMV0gPSBzdHJ0b2xvd2VyKCRzb3J0WzFdKTsKICAkRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOwogIGlmICghZXJlZygiUEhQLyIucGhwdmVyc2lvbigpLCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpIHskRElTUF9TRVJWRVJfU09GVFdBUkUgLj0gIi4gUEhQLyIucGhwdmVyc2lvbigpO30KICAkRElTUF9TRVJWRVJfU09GVFdBUkUgPSBzdHJfcmVwbGFjZSgiUEhQLyIucGhwdmVyc2lvbigpLCI8YSBocmVmPVwiIi4kc3VybC4ieD1waHBpbmZvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+PHU+UEhQLyIucGhwdmVyc2lvbigpLiI8L3U+PC9iPjwvYT4iLGh0bWxzcGVjaWFsY2hhcnMoJERJU1BfU0VSVkVSX1NPRlRXQVJFKSk7CiAgQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7CiAgQGluaV9zZXQoImhpZ2hsaWdodC5jb21tZW50IiwkaGlnaGxpZ2h0X2NvbW1lbnQpOwogIEBpbmlfc2V0KCJoaWdobGlnaHQuZGVmYXVsdCIsJGhpZ2hsaWdodF9kZWZhdWx0KTsKICBAaW5pX3NldCgiaGlnaGxpZ2h0Lmh0bWwiLCRoaWdobGlnaHRfaHRtbCk7CiAgQGluaV9zZXQoImhpZ2hsaWdodC5rZXl3b3JkIiwkaGlnaGxpZ2h0X2tleXdvcmQpOwogIEBpbmlfc2V0KCJoaWdobGlnaHQuc3RyaW5nIiwkaGlnaGxpZ2h0X3N0cmluZyk7CiAgaWYgKCFpc19hcnJheSgkYWN0Ym94KSkgeyAkYWN0Ym94ID0gYXJyYXkoKTsgfQogICRkc3BhY3QgPSAkeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHgpOwogICRkaXNwX2Z1bGxwYXRoID0gJGxzX2FyciA9ICRub3RscyA9IG51bGw7CiAgJHVkID0gdXJsZW5jb2RlKCRkKTsKICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9CiAgZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30KICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogICRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOwogICRkaXNwZCA9IGh0bWxzcGVjaWFsY2hhcnMoJGQpOwplY2hvICRodG1sX3N0YXJ0OwplY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcjI+PGgzPiRzaF9uYW1lPC9oMz48Zm9udCBjb2xvcj1saW1lPi46OiBGVUNLIFRIRSBTWVNURU0gOjouPC9mb250PjwvZGl2PjxociBjb2xvcj1ibGFjaz5cbiI7CmVjaG8gIjx0YWJsZSBpZD1wYWdlYmFyPjx0cj48dGQgd2lkdGg9NTAlPjxwPiIuCiAgICAgIlNvZnR3YXJlL0tlcm5lbCBJbmZvIDogIi4kRElTUF9TRVJWRVJfU09GVFdBUkUgLiIgLSA8YSBocmVmPSIuJHN1cmwuIng9cGhwaW5pPnBocC5pbmk8L2E+PGJyPiIuCiAgICAgIiRoc2FmZW1vZGU8YnI+Ii4KICAgICAiT1MgOiAiLnBocF91bmFtZSgpLiI8YnI+IjsKaWYgKCEkd2luKSB7IGVjaG8gIlVzZXIgSUQgOiAiLm15c2hlbGxleGVjKCJpZCIpOyB9CmVsc2UgeyBlY2hvICJVc2VyIDogIiAuIGdldF9jdXJyZW50X3VzZXIoKTsgfQplY2hvICI8L3A+PC90ZD4iLgogICAgICI8dGQgd2lkdGg9NTAlPjxwPlNlcnZlciBJUCA6IDxhIGhyZWY9aHR0cDovL3d3dy5pcC1hZHJlc3MuY29tLyIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiI+Ii5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIjwvYT4gLSAiLgogICAgICJZb3VyIElQIDogPGEgaHJlZj1odHRwOi8vd3d3LmlwLWFkcmVzcy5jb20vIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPiIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIjwvYT48YnI+IjsKaWYoJHdpbil7ZWNobyAiRHJpdmVzIDogIi5kaXNwX2RyaXZlcygkZCwkc3VybCkuIjxicj4iO30KZWNobyAiRnJlZXNwYWNlIDogIi5kaXNwX2ZyZWVzcGFjZSgkZCk7CmVjaG8gIjwvcD48L3RkPjwvdHI+IjsKZWNobyAiPHRyPjx0ZCBjb2xzcGFuPTI+PHA+IjsKZWNobyAiTXlTUUw6ICIudGVzdG15c3FsKCkuIiBjVVJMOiAiLnRlc3RjdXJsKCkuIiBXR2V0OiAiLnRlc3R3Z2V0KCkuIiBGZXRjaDogIi50ZXN0ZmV0Y2goKS4iIFBlcmw6ICIudGVzdHBlcmwoKS4iIGdjYzogIi50ZXN0Z2NjKCkuIiBTSDogIi50ZXN0U0goKS4iPGJyPiI7CmVjaG8gIkRpc2FibGVkIEZ1bmN0aW9uczogIi5zaG93ZGlzYWJsZWZ1bmN0aW9ucygpOwplY2hvICI8L3A+PC90ZD48L3RyPiI7CmVjaG8gIjx0cj48dGQgY29sc3Bhbj0yIGlkPW1haW5tZW51PiI7CmlmIChjb3VudCgkcXVpY2tsYXVuY2gyKSA+IDApIHsKICBmb3JlYWNoKCRxdWlja2xhdW5jaDIgYXMgJGl0ZW0pIHsKICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVkIix1cmxlbmNvZGUoJGQpLCRpdGVtWzFdKTsKICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7CiAgICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOwogICAgaWYgKGVtcHR5KCR2KSkgewogICAgICAkYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAgICAgIHVuc2V0KCRhW2NvdW50KCRhKS0yXSk7CiAgICAgICR2ID0gam9pbihESVJFQ1RPUllfU0VQQVJBVE9SLCRhKTsKICAgIH0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiV1cGQiLHVybGVuY29kZSgkdiksJGl0ZW1bMV0pOwogICAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT5cbiI7CiAgfQp9CmVjaG8gIjwvdGQ+PHRyPjx0ZCBjb2xzcGFuPTIgaWQ9bWFpbm1lbnU+IjsKaWYgKGNvdW50KCRxdWlja2xhdW5jaDEpID4gMCkgewogIGZvcmVhY2goJHF1aWNrbGF1bmNoMSBhcyAkaXRlbSkgewogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOwogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsKICAgICR2ID0gcmVhbHBhdGgoJGQuIi4uIik7CiAgICBpZiAoZW1wdHkoJHYpKSB7CiAgICAgICRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsKICAgICAgdW5zZXQoJGFbY291bnQoJGEpLTJdKTsKICAgICAgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpOwogICAgfQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXVwZCIsdXJsZW5jb2RlKCR2KSwkaXRlbVsxXSk7CiAgICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPlxuIjsKICB9Cn0KZWNobyAiPC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0yPiI7CmVjaG8gIjxwIGNsYXNzPWZsZWZ0PiI7CiRwZCA9ICRlID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLHN1YnN0cigkZCwwLC0xKSk7CiRpID0gMDsKZm9yZWFjaCgkcGQgYXMgJGIpIHsKICAkdCA9ICIiOyAkaiA9IDA7CiAgZm9yZWFjaCAoJGUgYXMgJHIpIHsKICAgICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIGlmICgkaiA9PSAkaSkgeyBicmVhazsgfQogICAgJGorKzsKICB9CiAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLnVybGVuY29kZSgkdCkuIiZzb3J0PSIuJHNvcnQuIlwiPjxmb250IGNvbG9yPXdoaXRlPiIuaHRtbHNwZWNpYWxjaGFycygkYikuRElSRUNUT1JZX1NFUEFSQVRPUi4iPC9mb250PjwvYT4iOwogICRpKys7Cn0KZWNobyAiIC0gIjsKaWYgKGlzX3dyaXRhYmxlKCRkKSkgewogICR3ZCA9IFRSVUU7CiAgJHdkdCA9ICI8Zm9udCBjb2xvcj0jMDBGRjAwPltPS108L2ZvbnQ+IjsKICBlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRkKSkuIjwvZm9udD4iOwp9CmVsc2UgewogICR3ZCA9IEZBTFNFOwogICR3ZHQgPSAiPGZvbnQgY29sb3I9cmVkPltSZWFkLU9ubHldPC9mb250PiI7CiAgZWNobyAiPGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPiI7Cn0KPz4KPC9wPgo8ZGl2IGNsYXNzPWZyaWdodD4KPGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImxzIj4KRGlyZWN0b3J5OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj4KPC9mb3JtPgo8L2Rpdj4KPC90ZD48L3RyPjwvdGFibGU+Cjw/cGhwCmVjaG8gIjx0YWJsZSBpZD1tYWluaW5mbz48dHI+PHRkIHdpZHRoPVwiMTAwJVwiPlxuIjsKaWYgKCR4ID09ICIiKSB7ICR4ID0gJGRzcGFjdCA9ICJscyI7IH0KaWYgKCR4ID09ICJwaHBpbmkiICkgeyBnZXRfcGhwaW5pKCk7IH0KaWYgKCR4ID09ICJzcWwiKSB7CiAgJHNxbF9zdXJsID0gJHN1cmwuIng9c3FsIjsKICBpZiAoJHNxbF9sb2dpbikgIHskc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pO30KICBpZiAoJHNxbF9wYXNzd2QpIHskc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7fQogIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9CiAgaWYgKCRzcWxfcG9ydCkgICB7JHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7fQogIGlmICgkc3FsX2RiKSAgICAgeyRzcWxfc3VybCAuPSAiJnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7fQogICRzcWxfc3VybCAuPSAiJiI7CiAgZWNobyAiPHRhYmxlPiIuCiAgICAgICAiPHRyPjx0ZCB3aWR0aD1cIjEwMCVcIiBjb2xzcGFuPTIgY2xhc3M9YmFyaGVhZGVyPiI7CiAgaWYgKCRzcWxfc2VydmVyKSB7CiAgICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsKICAgICRlcnIgPSBteXNxbF9zbWFydGVycm9yKCk7CiAgICBAbXlzcWxfc2VsZWN0X2RiKCRzcWxfZGIsJHNxbF9zb2NrKTsKICAgIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQogIH0KICBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9CiAgZWNobyAiLjogU1FMIE1hbmFnZXIgOi48YnI+IjsKICBpZiAoISRzcWxfc29jaykgewogICAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30KICAgIGVsc2Uge2VjaG8gIkNhbid0IGNvbm5lY3QhICIuJGVycjt9CiAgfQogIGVsc2UgewogICAgJHNxbHF1aWNrbGF1bmNoID0gYXJyYXkoKTsKICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkluZGV4Iiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIik7CiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7CiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9c2VydmVyc3RhdHVzIik7CiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9c2VydmVydmFycyIpOwogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7CiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCRzdXJsLiJ4PXNxbCIpOwogICAgZWNobyAiTXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8YnI+IjsKICAgIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0KICB9CiAgZWNobyAiPC90ZD48L3RyPjx0cj4iOwogIGlmICghJHNxbF9zb2NrKSB7CiAgICBlY2hvICI8dGQgd2lkdGg9XCIyOCVcIiBoZWlnaHQ9XCIxMDBcIiB2YWxpZ249XCJ0b3BcIj48bGk+SWYgbG9naW4gaXMgbnVsbCwgbG9naW4gaXMgb3duZXIgb2YgcHJvY2Vzcy48bGk+SWYgaG9zdCBpcyBudWxsLCBob3N0IGlzIGxvY2FsaG9zdDwvYj48bGk+SWYgcG9ydCBpcyBudWxsLCBwb3J0IGlzIDMzMDYgKGRlZmF1bHQpPC90ZD48dGQgd2lkdGg9XCI5MCVcIiBoZWlnaHQ9MSB2YWxpZ249XCJ0b3BcIj4iOwogICAgZWNobyAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj0wPjx0cj48dGQ+PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj48L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj48L3RkPjwvdHI+PGZvcm0gYWN0aW9uPVwiICRzdXJsIFwiIG1ldGhvZD1cIlBPU1RcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48dHI+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cInJvb3RcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiXCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCJcIiBtYXhsZW5ndGg9XCI2NFwiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwibG9jYWxob3N0XCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIjMzMDZcIiBtYXhsZW5ndGg9XCI2XCIgc2l6ZT1cIjNcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29ubmVjdFwiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPiI7CiAgfQogIGVsc2UgewogICAgaWYgKCFlbXB0eSgkc3FsX2RiKSkgewogICAgICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+CiAgICAgIDw/cGhwCiAgICAgICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsKICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQogICAgICBlbHNlIHsKICAgICAgICBlY2hvICItLS1bIDxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT4gXS0tLTxicj4iOwogICAgICAgICRjID0gMDsKICAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOyAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsgZWNobyAiPGI+KyZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJnNxbF90Ymw9Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYj48L2E+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj4iOyBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOyAkYysrO30KICAgICAgICBpZiAoISRjKSB7ZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlLiI7fQogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgPz48dGQgd2lkdGg9IjEiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkc3FsX3N1cmw7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT4KICAgICAgPD9waHAKICAgICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfZGJzKCRzcWxfc29jayk7CiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgICAgZWxzZSB7CiAgICAgICAgPz48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxzZWxlY3QgbmFtZT0ic3FsX2RiIj4KICAgICAgICA8P3BocAogICAgICAgICRjID0gMDsKICAgICAgICAkZGJzID0gIiI7CiAgICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHskZGJzIC49ICI8b3B0aW9uIHZhbHVlPVwiIi4kcm93WzBdLiJcIiI7IGlmICgkc3FsX2RiID09ICRyb3dbMF0pIHskZGJzIC49ICIgc2VsZWN0ZWQiO30gJGRicyAuPSAiPiIuJHJvd1swXS4iPC9vcHRpb24+IjsgJGMrKzt9CiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7CiAgICAgICAgZWNobyAkZGJzOwogICAgICB9CiAgICAgID8+PC9zZWxlY3Q+PGhyIHNpemU9IjEiIG5vc2hhZGU+UGxlYXNlLCBzZWxlY3QgZGF0YWJhc2U8aHIgc2l6ZT0iMSIgbm9zaGFkZT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPjwvZm9ybT4KICAgICAgPD9waHAKICAgIH0KICAgIGVjaG8gIjwvdGQ+PHRkIHdpZHRoPVwiMTAwJVwiPiI7CiAgICAkZGlwbGF5ID0gVFJVRTsKICAgIGlmICgkc3FsX2RiKSB7CiAgICAgIGlmICghaXNfbnVtZXJpYygkYykpIHskYyA9IDA7fQogICAgICBpZiAoJGMgPT0gMCkgeyRjID0gIm5vIjt9CiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsKICAgICAgaWYgKGNvdW50KCRkYnF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRkYnNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0KICAgICAgZWNobyAiPC9iPjwvY2VudGVyPiI7CiAgICAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsKICAgICAgaWYgKCRzcWxfeCA9PSAidGJsZHJvcCIpIHskc3FsX3F1ZXJ5ID0gIkRST1AgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxlbXB0eSIpIHskc3FsX3F1ZXJ5ID0gIiI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSBGUk9NIGAiLiR2LiJgIFxuIjt9ICRzcWxfeCA9ICJxdWVyeSI7fQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsY2hlY2siKSB7JHNxbF9xdWVyeSA9ICJDSEVDSyBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibG9wdGltaXplIikgeyRzcWxfcXVlcnkgPSAiT1BUSU1JWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxhbmFseXplIikgeyRzcWxfcXVlcnkgPSAiQU5BTFlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gImRlbGV0ZXJvdyIpIHskc3FsX3F1ZXJ5ID0gIiI7IGlmICghZW1wdHkoJGJveHJvd19hbGwpKSB7JHNxbF9xdWVyeSA9ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgOyI7fSBlbHNlIHtmb3JlYWNoKCRib3hyb3cgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdi4iIExJTUlUIDE7XG4iO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpO30gJHNxbF94ID0gInF1ZXJ5Ijt9CiAgICAgIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewogICAgICAgIGlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMSkgewogICAgICAgICAgJGtleXMgPSAiIjsKICAgICAgICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsKICAgICAgICAgIGZvcmVhY2ggKCRha2V5cyBhcyAkdikgeyRrZXlzIC49ICJgIi5hZGRzbGFzaGVzKCR2KS4iYCwgIjt9CiAgICAgICAgICBpZiAoIWVtcHR5KCRrZXlzKSkgeyRrZXlzID0gc3Vic3RyKCRrZXlzLDAsc3RybGVuKCRrZXlzKS0yKTt9CiAgICAgICAgICAkdmFsdWVzID0gIiI7CiAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICBmb3JlYWNoIChhcnJheV92YWx1ZXMoJHNxbF90YmxfaW5zZXJ0KSBhcyAkdikge2lmICgkZnVuY3QgPSAkc3FsX3RibF9pbnNlcnRfZnVuY3RzWyRha2V5c1skaV1dKSB7JHZhbHVlcyAuPSAkZnVuY3QuIiAoIjt9ICR2YWx1ZXMgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgaWYgKCRmdW5jdCkgeyR2YWx1ZXMgLj0gIikiO30gJHZhbHVlcyAuPSAiLCAiOyAkaSsrO30KICAgICAgICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQogICAgICAgICAgJHNxbF9xdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi4kc3FsX3RibC4iYCAoICIuJGtleXMuIiApIFZBTFVFUyAoICIuJHZhbHVlcy4iICk7IjsKICAgICAgICAgICRzcWxfeCA9ICJxdWVyeSI7CiAgICAgICAgICAkc3FsX3RibF94ID0gImJyb3dzZSI7CiAgICAgICAgfQogICAgICAgIGVsc2VpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDIpIHsKICAgICAgICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICAgICAgICAgJHNxbF9xdWVyeSA9ICJVUERBVEUgYCIuJHNxbF90YmwuImAgU0VUICIuJHNldC4iIFdIRVJFICIuJHNxbF90YmxfaW5zZXJ0X3EuIiBMSU1JVCAxOyI7CiAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsKICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgICAgICAgICAkc3FsX3ggPSAicXVlcnkiOwogICAgICAgICAgJHNxbF90YmxfeCA9ICJicm93c2UiOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoJHNxbF94ID09ICJxdWVyeSIpIHsKICAgICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICAgICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CiAgICAgICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfeCA9ICRzcWxfZ290bzt9CiAgICAgICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfeCkpIHtlY2hvICI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIj48dHI+PHRkPjxmb3JtIGFjdGlvbj1cIiIuJHNxbF9zdXJsLiJcIiBtZXRob2Q9XCJQT1NUXCI+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0bzoiO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5IDoiO30gZWNobyAiPC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3hcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+IDxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iO30KICAgICAgfQogICAgICBpZiAoaW5fYXJyYXkoJHNxbF94LCRhY3RzKSkgewogICAgICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPgogICAgICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3dGJsIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+CiAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+CiAgICAgICAgPC9mb3JtPjwvdGQ+CiAgICAgICAgPHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+RHVtcCBEQjo8L2I+CiAgICAgICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJkdW1wIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPgogICAgICAgIDw/cGhwCiAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7ZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iO30KICAgICAgICBpZiAoJHNxbF94ID09ICJuZXd0YmwiKSB7CiAgICAgICAgICBlY2hvICI8Yj4iOwogICAgICAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHsKICAgICAgICAgICAgZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30KICAgICAgICB9CiAgICAgICAgZWxzZWlmICgkc3FsX3ggPT0gImR1bXAiKSB7CiAgICAgICAgICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsKICAgICAgICAgICAgJGRpcGxheSA9IEZBTFNFOwogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOwogICAgICAgICAgICBlY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7CiAgICAgICAgICAgICR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsKICAgICAgICAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7CiAgICAgICAgICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQogICAgICAgICAgICBlbHNlIHskdG1wID0gaHRtbHNwZWNpYWxjaGFycygiLi9kdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIik7fQogICAgICAgICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOwogICAgICAgICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsKICAgICAgICAgICAgZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9zYXZldG9maWxlXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD4iOwogICAgICAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOwogICAgICAgICAgICBlY2hvICI8L2Zvcm0+IjsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAkZGlwbGF5ID0gVFJVRTsKICAgICAgICAgICAgJHNldCA9IGFycmF5KCk7CiAgICAgICAgICAgICRzZXRbInNvY2siXSA9ICRzcWxfc29jazsKICAgICAgICAgICAgJHNldFsiZGIiXSA9ICRzcWxfZGI7CiAgICAgICAgICAgICRkdW1wX291dCA9ICJkb3dubG9hZCI7CiAgICAgICAgICAgICRzZXRbInByaW50Il0gPSAwOwogICAgICAgICAgICAkc2V0WyJubDJiciJdID0gMDsKICAgICAgICAgICAgJHNldFsiIl0gPSAwOwogICAgICAgICAgICAkc2V0WyJmaWxlIl0gPSAkZHVtcF9maWxlOwogICAgICAgICAgICAkc2V0WyJhZGRfZHJvcCJdID0gVFJVRTsKICAgICAgICAgICAgJHNldFsib25seXRhYnMiXSA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmICghZW1wdHkoJGRtcHRibHMpKSB7JHNldFsib25seXRhYnMiXSA9IGV4cGxvZGUoIjsiLCRkbXB0YmxzKTt9CiAgICAgICAgICAgICRyZXQgPSBteXNxbF9kdW1wKCRzZXQpOwogICAgICAgICAgICBpZiAoJHNxbF9kdW1wX2Rvd25sb2FkKSB7CiAgICAgICAgICAgICAgQG9iX2NsZWFuKCk7CiAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRyZXQpKTsKICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi5iYXNlbmFtZSgkc3FsX2R1bXBfZmlsZSkuIlwiOyIpOwogICAgICAgICAgICAgIGVjaG8gJHJldDsKICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2VpZiAoJHNxbF9kdW1wX3NhdmV0b2ZpbGUpIHsKICAgICAgICAgICAgICAkZnAgPSBmb3Blbigkc3FsX2R1bXBfZmlsZSwidyIpOwogICAgICAgICAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30KICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsJHJldCk7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Uge2VjaG8gIjxiPkR1bXA6IG5vdGhpbmcgdG8gZG8hPC9iPiI7fQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGRpcGxheSkgewogICAgaWYgKCFlbXB0eSgkc3FsX3RibCkpIHsKICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3gpKSB7JHNxbF90YmxfeCA9ICJicm93c2UiO30KICAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsKICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsKICAgICAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7CiAgICAgICR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9CiAgICAgIGlmICgkc3FsX2xzID4gJHNxbF9sZSkgeyRzcWxfbGUgPSAkc3FsX2xzICsgJHBlcnBhZ2U7fQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfcGFnZSkpIHskc3FsX3RibF9wYWdlID0gMDt9CiAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHskc3FsX3RibF9scyA9IDA7fQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbGUpKSB7JHNxbF90YmxfbGUgPSAzMDt9CiAgICAgICRwZXJwYWdlID0gJHNxbF90YmxfbGUgLSAkc3FsX3RibF9sczsKICAgICAgaWYgKCFpc19udW1lcmljKCRwZXJwYWdlKSkgeyRwZXJwYWdlID0gMTA7fQogICAgICAkbnVtcGFnZXMgPSAkY291bnRfcm93WzBdLyRwZXJwYWdlOwogICAgICAkZSA9IGV4cGxvZGUoIiAiLCRzcWxfb3JkZXIpOwogICAgICBpZiAoY291bnQoJGUpID09IDIpIHsKICAgICAgICBpZiAoJGVbMF0gPT0gImQiKSB7JGFzY19kZXNjID0gIkRFU0MiO30KICAgICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9CiAgICAgICAgJHYgPSAiT1JERVIgQlkgYCIuJGVbMV0uImAgIi4kYXNjX2Rlc2MuIiAiOwogICAgICB9CiAgICAgIGVsc2UgeyR2ID0gIiI7fQogICAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCAiLiR2LiJMSU1JVCAiLiRzcWxfdGJsX2xzLiIgLCAiLiRwZXJwYWdlLiIiOwogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOwogICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PXN0cnVjdHVyZVwiPls8Yj4gU3RydWN0dXJlIDwvYj5dPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9YnJvd3NlXCI+WzxiPiBCcm93c2UgPC9iPl08L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF94PXRibGR1bXAmdGhpc3RibD0xXCI+WzxiPiBEdW1wIDwvYj5dPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgIGlmICgkc3FsX3RibF94ID09ICJzdHJ1Y3R1cmUiKSB7ZWNobyAiPGJyPjxicj48Yj5Db21pbmcgc29vb24hPC9iPiI7fQogICAgICBpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewogICAgICAgIGlmICghaXNfYXJyYXkoJHNxbF90YmxfaW5zZXJ0KSkgeyRzcWxfdGJsX2luc2VydCA9IGFycmF5KCk7fQogICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkgeyAgfSAvL05vdCBSZWFkeQogICAgICAgIGVsc2UgewogICAgICAgICAgZWNobyAiPGJyPjxicj48Yj5JbnNlcnRpbmcgcm93IGludG8gdGFibGU6PC9iPjxicj4iOwogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsKICAgICAgICAgICAgJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsKICAgICAgICAgICAgJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsKICAgICAgICAgICAgJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsKICAgICAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7CiAgICAgICAgICAgICR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsKICAgICAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9CiAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7CiAgICAgICAgICBmb3JlYWNoICgkdGJsX3N0cnVjdF9maWVsZHMgYXMgJGZpZWxkKSB7CiAgICAgICAgICAgICRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOwogICAgICAgICAgICBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7JHYgPSAiIjt9CiAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iPC9iPjwvdGQ+PHRkPiIuJGZpZWxkWyJUeXBlIl0uIjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT1cInNxbF90YmxfaW5zZXJ0X2Z1bmN0c1siLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPjxvcHRpb24+UEFTU1dPUkQ8L29wdGlvbj48b3B0aW9uPk1ENTwvb3B0aW9uPjxvcHRpb24+RU5DUllQVDwvb3B0aW9uPjxvcHRpb24+QVNDSUk8L29wdGlvbj48b3B0aW9uPkNIQVI8L29wdGlvbj48b3B0aW9uPlJBTkQ8L29wdGlvbj48b3B0aW9uPkxBU1RfSU5TRVJUX0lEPC9vcHRpb24+PG9wdGlvbj5DT1VOVDwvb3B0aW9uPjxvcHRpb24+QVZHPC9vcHRpb24+PG9wdGlvbj5TVU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiXCI+LS0tLS0tLS08L29wdGlvbj48b3B0aW9uPlNPVU5ERVg8L29wdGlvbj48b3B0aW9uPkxDQVNFPC9vcHRpb24+PG9wdGlvbj5VQ0FTRTwvb3B0aW9uPjxvcHRpb24+Tk9XPC9vcHRpb24+PG9wdGlvbj5DVVJEQVRFPC9vcHRpb24+PG9wdGlvbj5DVVJUSU1FPC9vcHRpb24+PG9wdGlvbj5GUk9NX0RBWVM8L29wdGlvbj48b3B0aW9uPkZST01fVU5JWFRJTUU8L29wdGlvbj48b3B0aW9uPlBFUklPRF9BREQ8L29wdGlvbj48b3B0aW9uPlBFUklPRF9ESUZGPC9vcHRpb24+PG9wdGlvbj5UT19EQVlTPC9vcHRpb24+PG9wdGlvbj5VTklYX1RJTUVTVEFNUDwvb3B0aW9uPjxvcHRpb24+VVNFUjwvb3B0aW9uPjxvcHRpb24+V0VFS0RBWTwvb3B0aW9uPjxvcHRpb24+Q09OQ0FUPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0WyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdmFsdWVzWyRuYW1lXSkuIlwiIHNpemU9NTA+PC90ZD48L3RyPiI7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgICB9CiAgICAgICAgICBlY2hvICI8L3RhYmxlPjxicj4iOwogICAgICAgICAgZWNobyAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMVwiIjsgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48Yj5JbnNlcnQgYXMgbmV3IHJvdzwvYj4iOwogICAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgb3IgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMlwiIGNoZWNrZWQ+PGI+U2F2ZTwvYj4iOyBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9xXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmxfaW5zZXJ0X3EpLiJcIj4iO30KICAgICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCRzcWxfdGJsX3ggPT0gImJyb3dzZSIpIHsKICAgICAgICAkc3FsX3RibF9scyA9IGFicygkc3FsX3RibF9scyk7CiAgICAgICAgJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOwogICAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgICAgICBlY2hvICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1tdWx0aXBhZ2VcIiBoZWlnaHQ9XCIxMlwiIHdpZHRoPVwiMTBcIiBhbHQ9XCJQYWdlc1wiPiZuYnNwOyI7CiAgICAgICAgJGIgPSAwOwogICAgICAgIGZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKSB7CiAgICAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF9vcmRlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIiZzcWxfdGJsX2xzPSIuKCRpKiRwZXJwYWdlKS4iJnNxbF90YmxfbGU9Ii4oJGkqJHBlcnBhZ2UrJHBlcnBhZ2UpLiJcIj48dT4iO30KICAgICAgICAgIGVjaG8gJGk7CiAgICAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30KICAgICAgICAgIGlmICgoJGkvMzAgPT0gcm91bmQoJGkvMzApKSBhbmQgKCRpID4gMCkpIHtlY2hvICI8YnI+Ijt9CiAgICAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30KICAgICAgICB9CiAgICAgICAgaWYgKCRpID09IDApIHtlY2hvICJlbXB0eSI7fQogICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInhcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfb3JkZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbHNcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbHMuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sZVwiIHZhbHVlPVwiIi4kc3FsX3RibF9sZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+IjsKICAgICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnY29sb3I9IzAwMDAwMCBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+IjsKICAgICAgICBlY2hvICI8dHI+IjsKICAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD4iOwogICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHsKICAgICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsKICAgICAgICAgIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9CiAgICAgICAgICBlbHNlIHskcyA9ICJhIjsgJG0gPSAiZGVzYyI7fQogICAgICAgICAgZWNobyAiPHRkPiI7CiAgICAgICAgICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQogICAgICAgICAgaWYgKCRlWzFdICE9ICR2KSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kZVswXS4iICIuJHYuIlwiPjxiPiIuJHYuIjwvYj48L2E+Ijt9CiAgICAgICAgICBlbHNlIHtlY2hvICI8Yj4iLiR2LiI8L2I+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kcy4iICIuJHYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfIi4kbS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLiRtLiJcIj48L2E+Ijt9CiAgICAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICAgfQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJncmVlblwiPjxiPkFjdGlvbjwvYj48L2ZvbnQ+PC90ZD4iOwogICAgICBlY2hvICI8L3RyPiI7CiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7CiAgICAgICBlY2hvICI8dHI+IjsKICAgICAgICR3ID0gIiI7CiAgICAgICAkaSA9IDA7CiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsgJHcgLj0gIiBgIi4kbmFtZS4iYCA9ICciLmFkZHNsYXNoZXMoJHYpLiInIEFORCI7ICRpKys7fQogICAgICAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyR3ID0gc3Vic3RyKCR3LDAsc3RybGVuKCR3KS0zKTt9CiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOwogICAgICAgJGkgPSAwOwogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpCiAgICAgICB7CiAgICAgICAgJHYgPSBodG1sc3BlY2lhbGNoYXJzKCR2KTsKICAgICAgICBpZiAoJHYgPT0gIiIpIHskdiA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+TlVMTDwvZm9udD4iO30KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOwogICAgICAgICRpKys7CiAgICAgICB9CiAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsKICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF94PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJFZGl0XCIgaGVpZ2h0PVwiMTRcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiOwogICAgICAgZWNobyAiPC90ZD4iOwogICAgICAgZWNobyAiPC90cj4iOwogICAgICB9CiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJsZWZ0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOwogICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiLCAkc3FsX3NvY2spOwogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgICBlbHNlCiAgICAgewogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdjb2xvcj0jMDAwMDAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7CiAgICAgICRpID0gMDsKICAgICAgJHRzaXplID0gJHRyb3dzID0gMDsKICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpCiAgICAgIHsKICAgICAgICR0c2l6ZSArPSAkcm93WyJEYXRhX2xlbmd0aCJdOwogICAgICAgJHRyb3dzICs9ICRyb3dbIlJvd3MiXTsKICAgICAgICRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOwogICAgICAgZWNobyAiPHRyPiI7CiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxbXVwiIHZhbHVlPVwiIi4kcm93WyJOYW1lIl0uIlwiPjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4iXCI+PGI+Ii4kcm93WyJOYW1lIl0uIjwvYj48L2E+Jm5ic3A7PC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHJvd1siUm93cyJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIkNyZWF0ZV90aW1lIl0uIjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlVwZGF0ZV90aW1lIl0uIjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2VtcHR5XCIgYWx0PVwiRW1wdHlcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0iLiRyb3dbIk5hbWUiXS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9pbnNlcnRcIiBhbHQ9XCJJbnNlcnRcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzwvdGQ+IjsKICAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgICRpKys7CiAgICAgIH0KICAgICAgZWNobyAiPHRyIGJnY29sb3I9XCIwMDAwMDBcIj4iOwogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4rPC9iPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+Ii4kaS4iIHRhYmxlKHMpPC9iPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjxiPiIuJHRyb3dzLiI8L2I+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTBdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTFdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+PC90ZD4iOwogICAgICBlY2hvICI8L3RyPiI7CiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGRyb3BcIj5Ecm9wPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGVtcHR5XCI+RW1wdHk8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsY2hlY2tcIj5DaGVjayB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxvcHRpbWl6ZVwiPk9wdGltaXplIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxhbmFseXplXCI+QW5hbHl6ZSB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOwogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICB9CiAgICB9CiAgIH0KICAgfQogIH0KICBlbHNlIHsKICAgJGFjdHMgPSBhcnJheSgiIiwibmV3ZGIiLCJzZXJ2ZXJzdGF0dXMiLCJzZXJ2ZXJ2YXJzIiwicHJvY2Vzc2VzIiwiZ2V0ZmlsZSIpOwogICBpZiAoaW5fYXJyYXkoJHNxbF94LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0ibmV3ZGIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXdkYiIgc2l6ZT0iMjAiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPlZpZXcgRmlsZTo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJnZXRmaWxlIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZ2V0ZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nZXRmaWxlKTsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwIH0KICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7CiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICBpZiAoJHNxbF94ID09ICJuZXdkYiIpIHsKICAgICBlY2hvICI8Yj4iOwogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+Ijt9CiAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQogICAgfQogICAgaWYgKCRzcWxfeCA9PSAic2VydmVyc3RhdHVzIikgewogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsKICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIGJnY29sb3I9IzAwMDAwMCBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPk5hbWU8L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7CiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQogICAgIGVjaG8gIjwvdGFibGU+PC9jZW50ZXI+IjsKICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIH0KICAgIGlmICgkc3FsX3ggPT0gInNlcnZlcnZhcnMiKSB7CiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7CiAgICAgZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KICAgICBlY2hvICI8L3RhYmxlPiI7CiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICB9CiAgICBpZiAoJHNxbF94ID09ICJwcm9jZXNzZXMiKSB7CiAgICAgaWYgKCFlbXB0eSgka2lsbCkpIHsKICAgICAgICRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOwogICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsKICAgICAgIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOwogICAgIH0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MiBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPklEPC9iPjwvdGQ+PHRkPjxiPlVTRVI8L2I+PC90ZD48dGQ+PGI+SE9TVDwvYj48L3RkPjx0ZD48Yj5EQjwvYj48L3RkPjx0ZD48Yj5DT01NQU5EPC9iPjwvdGQ+PHRkPjxiPlRJTUU8L2I+PC90ZD48dGQ+PGI+U1RBVEU8L2I+PC90ZD48dGQ+PGI+SU5GTzwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7CiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfeCA9PSAiZ2V0ZmlsZSIpCiAgICB7CiAgICAgJHRtcGRiID0gJHNxbF9sb2dpbi4iX3RtcGRiIjsKICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7CiAgICAgaWYgKCEkc2VsZWN0KSB7bXlzcWxfY3JlYXRlX2RiKCR0bXBkYik7ICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsgJGNyZWF0ZWQgPSAhISRzZWxlY3Q7fQogICAgIGlmICgkc2VsZWN0KQogICAgIHsKICAgICAgJGNyZWF0ZWQgPSBGQUxTRTsKICAgICAgbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgdG1wX2ZpbGVgICggYFZpZXdpbmcgdGhlIGZpbGUgaW4gc2FmZV9tb2RlK29wZW5fYmFzZWRpcmAgTE9OR0JMT0IgTk9UIE5VTEwgKTsiKTsKICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOwogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdG1wX2ZpbGU7Iik7CiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gIjxiPkVycm9yIGluIHJlYWRpbmcgZmlsZSAocGVybWlzaW9uIGRlbmllZCkhPC9iPiI7fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7fQogICAgICAgJGYgPSAiIjsKICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7JGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpO30KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQogICAgICAgZWxzZSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIjo8L2I+PGJyPiIubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkZikpLiI8YnI+Ijt9CiAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOwogICAgICB9CiAgICAgfQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgCiAgICB9CiAgIH0KICB9Cn0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsKaWYgKCRzcWxfc29jaykgewogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7CiAgaWYgKCghaXNfbnVtZXJpYygkYWZmZWN0ZWQpKSBvciAoJGFmZmVjdGVkIDwgMCkpeyRhZmZlY3RlZCA9IDA7fQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzIDogIi4kYWZmZWN0ZWQuIjwvY2VudGVyPjwvdGQ+PC90cj4iOwp9CmVjaG8gIjwvdGFibGU+IjsKfQppZiAoJHggPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgTm9UZWFNc2V4aXQoKTt9CmlmICgkeCA9PSAic2VjdXJpdHkiKSB7CiAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+LjogU2VydmVyIFNlY3VyaXR5IEluZm9ybWF0aW9uIDouPC9kaXY+Ii4KICAgICAgICI8dGFibGU+Ii4KICAgICAgICI8dHI+PHRkPk9wZW4gQmFzZSBEaXI8L3RkPjx0ZD4iLiRob3BlbmJhc2VkaXIuIjwvdGQ+PC90cj4iOwogIGVjaG8gIjx0ZD5QYXNzd29yZCBGaWxlPC90ZD48dGQ+IjsKICBpZiAoISR3aW4pIHsKICAgIGlmICgkbml4cGFzc3dkKSB7CiAgICAgIGlmICgkbml4cGFzc3dkID09IDEpIHskbml4cGFzc3dkID0gMDt9CiAgICAgIGVjaG8gIipuaXggL2V0Yy9wYXNzd2Q6PGJyPiI7CiAgICAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX3MpKSB7JG5peHB3ZF9zID0gMDt9CiAgICAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX2UpKSB7JG5peHB3ZF9lID0gJG5peHB3ZHBlcnBhZ2U7fQogICAgICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPVwic2VjdXJpdHlcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cIm5peHBhc3N3ZFwiIHZhbHVlPVwiMVwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dD1cIiBuYW1lPVwibml4cHdkX3NcIiB2YWx1ZT1cIiIuJG5peHB3ZF9zLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5peHB3ZF9lXCIgdmFsdWU9XCIiLiRuaXhwd2RfZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsKICAgICAgJGkgPSAkbml4cHdkX3M7CiAgICAgIHdoaWxlICgkaSA8ICRuaXhwd2RfZSkgewogICAgICAgICR1aWQgPSBwb3NpeF9nZXRwd3VpZCgkaSk7CiAgICAgICAgaWYgKCR1aWQpIHsKICAgICAgICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiJcIj4iLiR1aWRbImRpciJdLiI8L2E+IjsKICAgICAgICAgIGVjaG8gam9pbigiOiIsJHVpZCkuIjxicj4iOwogICAgICAgIH0KICAgICAgICAkaSsrOwogICAgICB9CiAgICB9CiAgICBlbHNlIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT4iO30KICB9CiAgZWxzZSB7CiAgICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOwogICAgaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCR2KSkge2VjaG8gIjx0ZCBjb2xzcGFuPTI+PGRpdiBjbGFzcz1meGVycm1zZz5Zb3UgY2FuJ3QgY3JhY2sgV2luZG93cyBwYXNzd29yZHMoIi4kdi4iKTwvZGl2PjwvdGQ+PC90cj4iOyB9CiAgICBlbHNlIHtlY2hvICJZb3UgY2FuIGNyYWNrIFdpbmRvd3MgcGFzc3dvcmRzLiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyA/LjwvdGQ+PC90cj4iO30KICB9CiAgZWNobyAiPC90ZD48L3RyPiI7CiAgZWNobyAiPHRyPjx0ZD5Db25maWcgRmlsZXM8L3RkPjx0ZD4iOwogIGlmICghJHdpbikgewogICAgJHYgPSBhcnJheSgKICAgICAgICBhcnJheSgiVXNlciBEb21haW5zIiwiL2V0Yy91c2VyZG9tYWlucyIpLAogICAgICAgIGFycmF5KCJDcGFuZWwgQ29uZmlnIiwiL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2ciKSwKICAgICAgICBhcnJheSgiQXBhY2hlIENvbmZpZyIsIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpLAogICAgICAgIGFycmF5KCJBcGFjaGUgQ29uZmlnIiwiL2V0Yy9odHRwZC5jb25mIiksCiAgICAgICAgYXJyYXkoIlN5c2xvZyBDb25maWciLCIvZXRjL3N5c2xvZy5jb25mIiksCiAgICAgICAgYXJyYXkoIk1lc3NhZ2Ugb2YgVGhlIERheSIsIi9ldGMvbW90ZCIpLAogICAgICAgIGFycmF5KCJIb3N0cyIsIi9ldGMvaG9zdHMiKQogICAgKTsKICAgICRzZXAgPSAiLyI7CiAgfQogIGVsc2UgewogICAgJHdpbmRpciA9ICRfU0VSVkVSWyJXSU5ESVIiXTsKICAgICRldGNkaXIgPSAkd2luZGlyIC4gIlxzeXN0ZW0zMlxkcml2ZXJzXGV0Y1xcIjsKICAgICR2ID0gYXJyYXkoCiAgICAgICAgYXJyYXkoIkhvc3RzIiwkZXRjZGlyLiJob3N0cyIpLAogICAgICAgIGFycmF5KCJMb2NhbCBOZXR3b3JrIE1hcCIsJGV0Y2Rpci4ibmV0d29ya3MiKSwKICAgICAgICBhcnJheSgiTE0gSG9zdHMiLCRldGNkaXIuImxtaG9zdHMuc2FtIiksCiAgICApOwogICAgJHNlcCA9ICJcXCI7CiAgfQogIGZvcmVhY2ggKCR2IGFzICRzZWNfYXJyKSB7CiAgICAkc2VjX2YgPSBzdWJzdHIoc3RycmNocigkc2VjX2FyclsxXSwgJHNlcCksIDEpOwogICAgJHNlY19kID0gcnRyaW0oJHNlY19hcnJbMV0sJHNlY19mKTsKICAgICRzZWNfZnVsbCA9ICRzZWNfZC4kc2VjX2Y7CiAgICAkc2VjX2QgPSBydHJpbSgkc2VjX2QsJHNlcCk7CiAgICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHNlY19mdWxsKSkgewogICAgICBlY2hvICIgWyA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9JHNlY19mJmQ9Ii51cmxlbmNvZGUoJHNlY19kKS4iJmZ0PXR4dFwiPjx1PjxiPiIuJHNlY19hcnJbMF0uIjwvYj48L3U+PC9hPiBdICI7CiAgICB9CiAgfQogIGVjaG8gIjwvdGQ+PC90cj4iOwoKICBmdW5jdGlvbiBkaXNwbGF5c2VjaW5mbygkbmFtZSwkdmFsdWUpIHsKICAgIGlmICghZW1wdHkoJHZhbHVlKSkgewogICAgICBlY2hvICI8dHI+PHRkPiIuJG5hbWUuIjwvdGQ+PHRkPjxwcmU+Ii53b3Jkd3JhcCgkdmFsdWUsMTAwKS4iPC9wcmU+PC90ZD48L3RyPiI7CiAgICB9CiAgfQogIGlmICghJHdpbikgewogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvdmVyc2lvbiIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJLZXJuZWwgVmVyc2lvbiIsbXlzaGVsbGV4ZWMoInN5c2N0bCAtYSB8IGdyZXAgdmVyc2lvbiIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIE5hbWUiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9pc3N1ZSIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIE5hbWUgKDIpIixteXNoZWxsZXhlYygiY2F0IC9ldGMvaXNzdWUucnBtbmV3IikpOwogICAgZGlzcGxheXNlY2luZm8oIkNQVSBJbmZvIixteXNoZWxsZXhlYygiY2F0IC9wcm9jL2NwdWluZm8iKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiUkFNIixteXNoZWxsZXhlYygiZnJlZSAtbSIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJIREQgU3BhY2UiLG15c2hlbGxleGVjKCJkZiAtaCIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJMaXN0IG9mIEF0dHJpYnV0ZXMiLG15c2hlbGxleGVjKCJsc2F0dHIgLWEiKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiTW91bnQgT3B0aW9ucyIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2ZzdGFiIikpOwogICAgZGlzcGxheXNlY2luZm8oImNVUkwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGN1cmwiKSk7CglkaXNwbGF5c2VjaW5mbygibHlueCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbHlueCIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJsaW5rcyBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbGlua3MiKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiZmV0Y2ggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGZldGNoIikpOwogICAgZGlzcGxheXNlY2luZm8oIkdFVCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggR0VUIikpOwogICAgZGlzcGxheXNlY2luZm8oInBlcmwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIHBlcmwiKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgQXBhY2hlPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgYXBhY2hlIikpOwogICAgZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIHBlcmw/IixteXNoZWxsZXhlYygid2hlcmVpcyBwZXJsIikpOwogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBwcm9mdHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHJvZnRwZC5jb25mIikpOwogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBodHRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIGh0dHBkLmNvbmYiKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiTG9jYXRlIG15LmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgbXkuY29uZiIpKTsKICAgIGRpc3BsYXlzZWNpbmZvKCJMb2NhdGUgcHN5Ym5jLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHN5Ym5jLmNvbmYiKSk7CiAgfQogIGVsc2UgewogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJ2ZXIiKSk7CiAgICBkaXNwbGF5c2VjaW5mbygiQWNjb3VudCBTZXR0aW5ncyIsbXlzaGVsbGV4ZWMoIm5ldCBhY2NvdW50cyIpKTsKICB9CiAgZWNobyAiPC90YWJsZT5cbiI7Cn0KCmlmICgkeCA9PSAianVtcCIpIHsKJG5naXBtdWogPSBiYXNlNjRfZGVjb2RlKCJLQ1J6YlNBOUlHbHVhVjluWlhRb0ozTmhabVZmYlc5a1pTY3BJRDA5SURBcElEOGdKSE50SUQwZ0oyOW1aaWM2SUdScFpTZ25QR1p2Ym5RZ2MybDZaVDBpTkNJZ1kyOXNiM0k5SWlNd01EQXdNREFpSUdaaFkyVTlJa05oYkdsaWNta2lQanhpUGtWeWNtOXlPaUJUWVdabFgyMXZaR1VnUFNCUGJqd3ZZajQ4TDJadmJuUStKeWs3Q25ObGRGOTBhVzFsWDJ4cGJXbDBLREFwT3dwQUpIQmhjM04zWkNBOUlHWnZjR1Z1S0NjdlpYUmpMM0JoYzNOM1pDY3NKM0luS1RzS2FXWWdLQ0VrY0dGemMzZGtLU0I3SUdScFpTZ25QSEErUEdJK1d5MWRJRVZ5Y205eUlEb2dRMjkxWkc1Z2RDQlNaV0ZrSUM5bGRHTXZjR0Z6YzNka1BDOWlQand2Y0Q0bktUc2dmUW9rY0hWaUlEMGdZWEp5WVhrb0tUc0tKSFZ6WlhKeklEMGdZWEp5WVhrb0tUc0tKR052Ym1ZZ1BTQmhjbkpoZVNncE93b2thU0E5SURBN0NuZG9hV3hsS0NGbVpXOW1LQ1J3WVhOemQyUXBLUXA3Q2lSemRISWdQU0JtWjJWMGN5Z2tjR0Z6YzNka0tUc0thV1lnS0NScElENGdNVEF3S1FwN0NpQWdKSEJ2Y3lBOUlITjBjbkJ2Y3lna2MzUnlMQ2M2SnlrN0NpQWdKSFZ6WlhKdVlXMWxJRDBnYzNWaWMzUnlLQ1J6ZEhJc01Dd2tjRzl6S1RzS0lDQWtaR2x5ZWlBOUlDY3ZhRzl0WlM4bkxpUjFjMlZ5Ym1GdFpTNG5MM0IxWW14cFkxOW9kRzFzTHljN0NpQWdhV1lnS0Nna2RYTmxjbTVoYldVZ0lUMGdKeWNwS1FvZ0lIc0tJQ0FnYVdZZ0tHbHpYM0psWVdSaFlteGxLQ1JrYVhKNktTa0tJQ0FnZXdvZ0lDQWdZWEp5WVhsZmNIVnphQ2drZFhObGNuTXNKSFZ6WlhKdVlXMWxLVHNLSUNBZ0lHRnljbUY1WDNCMWMyZ29KSEIxWWl3a1pHbHllaWs3Q2lBZ0lIMEtJQ0I5Q2lBZ0lIMEtKR2tyS3pzS2ZRcGxZMmh2SUNKY2JpQThjRDViTFYwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxYklGTlVRVkpVSUYwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxYkxWMGdJRHd2Y0Q1Y2JpSTdDbVp2Y21WaFkyZ2dLQ1IxYzJWeWN5QmhjeUFrZFhObGNpa0tld3BsWTJodklDSThabTl1ZENCemFYcGxQU2MwSnlCbVlXTmxQU2REWVd4cFluSnBKejRnVzBadmRXNWtYU0F2YUc5dFpTOGtkWE5sY2k5d2RXSnNhV05mYUhSdGJDODhMMlp2Ym5RK1BHSnlMejRpT3dwOUNtVmphRzhnSWx4dUlEeHdQbHN0WFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZzZ1JrbE9TVk5JSUYwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxYkxWMGdQQzl3UGx4dUlqc0taV05vYnlBaVhHNGdQSEErU25WdGNHbHVaeUJUWTJGdWJtVnlJR2x6SUVOdmJYQnNaWFJsWkNFOEwzQStYRzRpT3c9PSIpOwpldmFsICgkbmdpcG11aik7Cn0KCmlmICgkeCA9PSAiam9vbWxhIikgewokYWxtb29qID0gYmFzZTY0X2RlY29kZSgiYVdZZ0tDUmZVRTlUVkZzblptOXliVjloWTNScGIyNG5YU2tLZXdvS0pHZzlJancvSUdWamFHOG9jM1J5YVhCemJHRnphR1Z6S0dKaGMyVTJORjlrWldOdlpHVW9KeUl1ZFhKc1pXNWpiMlJsS0dKaGMyVTJORjlsYm1OdlpHVW9jM1J5WDNKbGNHeGhZMlVvSWljaUxDSW5JaXdvSkY5UVQxTlVXeWRqYjJSbEoxMHBLU2twTGlJbktTa3BPeUJsZUdsME95QS9QaUk3Q2dvZ0pHUmljSEpsWm1sNFBTZ2tYMUJQVTFSYkoyUmlYM0J5WldacGVDZGRLVHNLSUNSMWMyVnlibUZ0WlQwb0pGOVFUMU5VV3lka1lsOTFjMlZ5Ym1GdFpTZGRLVHNLSUNSd1lYTnpkMjl5WkQwb0pGOVFUMU5VV3lka1lsOXdZWE56ZDI5eVpDZGRLVHNLSUNSa1ltNWhiV1U5S0NSZlVFOVRWRnNuWkdKZmJtRnRaU2RkS1RzS0lDQWtjMmwwWlY5MWNtdzlLQ1JmVUU5VFZGc25jMmwwWlY5MWNtd25YU2s3Q2dva1kyODljbUZ1Wkc5dGRDZ3BPd29LQ2dvZ0lDQWdJQ0FrYkdsdWF6MXRlWE54YkY5amIyNXVaV04wS0NKc2IyTmhiR2h2YzNRaUxDUjFjMlZ5Ym1GdFpTd2tjR0Z6YzNkdmNtUXBJRHNLQ2lBZ0lDQWdJQ0FnSUcxNWMzRnNYM05sYkdWamRGOWtZaWdrWkdKdVlXMWxMQ1JzYVc1cktTQTdDZ29rZEhKNVEyaGhibWx1WjBsdVptOGdQU0J0ZVhOeGJGOXhkV1Z5ZVNnaVZWQkVRVlJGSUNJdUpHUmljSEpsWm1sNExpSjFjMlZ5Y3lCVFJWUWdkWE5sY201aGJXVWdQU2RoWkcxcGJpY2dMQ0J3WVhOemQyOXlaQ0E5SUNjNE56UTVZemN5Wm1KbFpqQmpOR0V6T0dVeU9EUTJNemxqTnprMk5Ea3pOaWNpS1RzS1pXTm9ieWdpUEdKeVBsc3JYU0JEYUdGdVoybHVaeUJoWkcxcGJpQndZWE56ZDI5eVpDQjBieUJPYjFSbFlVMXpJaWs3Q1FvSkNTQUtDUWtnSkhKbGNTQTliWGx6Y1d4ZmNYVmxjbmtvSWxORlRFVkRWQ0FxSUdaeWIyMGdJR0FpTGlSa1luQnlaV1pwZUM0aVpYaDBaVzV6YVc5dWMyQWdJaWs3Q2drSklBcHBaaUFvSUNSeVpYRWdLUXA3Q2lNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakNpTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1nSUNBZ0lDQWdJRll4TGpZZ0lDQWdJQ0FnSUNBakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpDaU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qQ2dvSkNRb2tjbVZ4SUQxdGVYTnhiRjl4ZFdWeWVTZ2lVMFZNUlVOVUlDb2dabkp2YlNBZ1lDSXVKR1JpY0hKbFptbDRMaUowWlcxd2JHRjBaVjl6ZEhsc1pYTmdJRmRJUlZKRklHTnNhV1Z1ZEY5cFpEMG5NQ2NnWVc1a0lHaHZiV1U5SnpFbklpazdDZ2tnSkdSaGRHRWdQU0J0ZVhOeGJGOW1aWFJqYUY5aGNuSmhlU2drY21WeEtUc0tKSFJsYlhCc1lYUmxYMjVoYldVOUpHUmhkR0ZiSW5SbGJYQnNZWFJsSWwwN0Nnb2tjbVZ4SUQxdGVYTnhiRjl4ZFdWeWVTZ2lVMFZNUlVOVUlDb2dabkp2YlNBZ1lDSXVKR1JpY0hKbFptbDRMaUpsZUhSbGJuTnBiMjV6WUNCWFNFVlNSU0J1WVcxbFBTY2lMaVIwWlcxd2JHRjBaVjl1WVcxbExpSW5JaWs3Q2drZ0pHUmhkR0VnUFNCdGVYTnhiRjltWlhSamFGOWhjbkpoZVNna2NtVnhLVHNLSkhSbGJYQnNZWFJsWDJsa1BTUmtZWFJoV3lKbGVIUmxibk5wYjI1ZmFXUWlYVHNLQ2lSMWNtd3lQU1J6YVhSbFgzVnliQzRpTDJsdVpHVjRMbkJvY0NJN0Nnb2tZMmdnUFNCamRYSnNYMmx1YVhRb0tUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgxVlNUQ3dnSkhWeWJESXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZSazlNVEU5WFRFOURRVlJKVDA0c0lERXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NRMVZTVEU5UVZGOVNSVlJWVWs1VVVrRk9VMFpGVWl3eEtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwaEZRVVJGVWl3Z01TazdDbU4xY214ZmMyVjBiM0IwS0NSamFDd2dRMVZTVEU5UVZGOVZVMFZTUVVkRlRsUXNJQ1IxYzJWeVlXZGxiblFwT3dvZ0lDQWdZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwTlBUMHRKUlVwQlVpd2dKR052S1RzZ0NpQWdJQ0JqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZRMDlQUzBsRlJrbE1SU3dnSkdOdktUc2dDZ29LSkdKMVptWmxjaUE5SUdOMWNteGZaWGhsWXlna1kyZ3BPd29LSkhKbGRIVnliajFsYm5SeVpUSjJNaWdrWW5WbVptVnlJQ3duUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZ2JtRnRaVDBpY21WMGRYSnVJaUIyWVd4MVpUMGlKeXduSWljcE93b2thR2xrWkdWdVBXVnVkSEpsTW5ZeUtDUmlkV1ptWlhJZ0xDYzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSW5MQ2NpSUhaaGJIVmxQU0l4SWljc05DazdDZ292THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeThLSkhWeWJESTlKSE5wZEdWZmRYSnNMaUl2YVc1a1pYZ3VjR2h3SWpzS0pHTm9JRDBnWTNWeWJGOXBibWwwS0NrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5VlVrd3NJQ1IxY213eUtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgxQlBVMVFzSURFcE93cGpkWEpzWDNObGRHOXdkQ2drWTJnc0lFTlZVa3hQVUZSZlVFOVRWRVpKUlV4RVV5d2lkWE5sY201aGJXVTlZV1J0YVc0bWNHRnpjM2RrUFU1dlZHVmhUWE1tYjNCMGFXOXVQV052YlY5c2IyZHBiaVowWVhOclBXeHZaMmx1Sm5KbGRIVnliajBpTGlSeVpYUjFjbTR1SWlZaUxpUm9hV1JrWlc0dUlqMHhJaWs3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3dnUTFWU1RFOVFWRjlHVDB4TVQxZE1UME5CVkVsUFRpd2dNU2s3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3hEVlZKTVQxQlVYMUpGVkZWU1RsUlNRVTVUUmtWU0xERXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZTRVZCUkVWU0xDQXdLVHNLWTNWeWJGOXpaWFJ2Y0hRb0pHTm9MQ0JEVlZKTVQxQlVYMVZUUlZKQlIwVk9WQ3dnSkhWelpYSmhaMlZ1ZENrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5RFQwOUxTVVZLUVZJc0lDUmpieWs3SUFwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmUTA5UFMwbEZSa2xNUlN3Z0pHTnZLVHNnQ2lSaWRXWm1aWElnUFNCamRYSnNYMlY0WldNb0pHTm9LVHNLQ2lSd2IzTWdQU0J6ZEhKd2IzTW9KR0oxWm1abGNpd2lZMjl0WDJOdmJtWnBaeUlwT3dwcFppZ2tjRzl6SUQwOVBTQm1ZV3h6WlNrZ2V3cGxZMmh2S0NJOFluSStXeTFkSUV4dloybHVJRVZ5Y205eUlpazdDbVY0YVhRN0NuMEtaV3h6WlNCN0NtVmphRzhvSWp4aWNqNWJLMTBnVEc5bmFXNGdVM1ZqWTJWemMyWjFiQ0lwT3dwOUNpOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx3b2tkWEpzTWowa2MybDBaVjkxY213dUlpOXBibVJsZUM1d2FIQS9iM0IwYVc5dVBXTnZiVjkwWlcxd2JHRjBaWE1tZEdGemF6MXpiM1Z5WTJVdVpXUnBkQ1pwWkQwaUxtSmhjMlUyTkY5bGJtTnZaR1VvSkhSbGJYQnNZWFJsWDJsa0xpSTZhVzVrWlhndWNHaHdJaWs3Q2lSamFDQTlJR04xY214ZmFXNXBkQ2dwT3dwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmVlZKTUxDQWtkWEpzTWlrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5R1QweE1UMWRNVDBOQlZFbFBUaXdnTVNrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN4RFZWSk1UMUJVWDFKRlZGVlNUbFJTUVU1VFJrVlNMREVwT3dwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmU0VWQlJFVlNMQ0F3S1RzS1kzVnliRjl6WlhSdmNIUW9KR05vTENCRFZWSk1UMUJVWDFWVFJWSkJSMFZPVkN3Z0pIVnpaWEpoWjJWdWRDazdDbU4xY214ZmMyVjBiM0IwS0NSamFDd2dRMVZTVEU5UVZGOURUMDlMU1VWS1FWSXNJQ1JqYnlrN0lBcGpkWEpzWDNObGRHOXdkQ2drWTJnc0lFTlZVa3hQVUZSZlEwOVBTMGxGUmtsTVJTd2dKR052S1RzZ0NpUmlkV1ptWlhJZ1BTQmpkWEpzWDJWNFpXTW9KR05vS1RzS0NpUm9hV1JrWlc0eVBXVnVkSEpsTW5ZeUtDUmlkV1ptWlhJZ0xDYzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSW5MQ2NpSUhaaGJIVmxQU0l4SWljc01pazdDbWxtS0NSb2FXUmtaVzR5S1NCN0NtVmphRzhvSWp4aWNqNWJLMTBnYVc1a1pYZ3VjR2h3SUdacGJHVWdabTkxYm1SbFpDQnBiaUJVYUdWdFpTQkZaR2wwYjNJaUtUc0tmUXBsYkhObElIc0taV05vYnlnaVBHSnlQbHN0WFNCcGJtUmxlQzV3YUhBZ1RtOTBJR1p2ZFc1a0lHbHVJRlJvWlcxbElFVmthWFJ2Y2lJcE93cGxlR2wwT3dwOUNtVmphRzhvSWp4aWNqNWJLbDBnVlhCa1lYUnBibWNnU1c1a1pYZ3VjR2h3SUM0dUxpNHVJaWs3Q2lSMWNtd3lQU1J6YVhSbFgzVnliQzRpTDJsdVpHVjRMbkJvY0Q5dmNIUnBiMjQ5WTI5dFgzUmxiWEJzWVhSbGN5WnNZWGx2ZFhROVpXUnBkQ0k3Q2dva1kyZ2dQU0JqZFhKc1gybHVhWFFvS1RzS1kzVnliRjl6WlhSdmNIUW9KR05vTENCRFZWSk1UMUJVWDFWU1RDd2dKSFZ5YkRJcE93cGpkWEpzWDNObGRHOXdkQ2drWTJnc0lFTlZVa3hQVUZSZlVFOVRWQ3dnTVNrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5UVQxTlVSa2xGVEVSVExDSnFabTl5YlZ0emIzVnlZMlZkUFNJdUpHZ3VJaVpxWm05eWJWdG1hV3hsYm1GdFpWMDlhVzVrWlhndWNHaHdKbXBtYjNKdFcyVjRkR1Z1YzJsdmJsOXBaRjA5SWk0a2RHVnRjR3hoZEdWZmFXUXVJaVlpTGlSb2FXUmtaVzR5TGlJOU1TWjBZWE5yUFhOdmRYSmpaUzV6WVhabElpazdDZ3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZSazlNVEU5WFRFOURRVlJKVDA0c0lERXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NRMVZTVEU5UVZGOVNSVlJWVWs1VVVrRk9VMFpGVWl3eEtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwaEZRVVJGVWl3Z01DazdDbU4xY214ZmMyVjBiM0IwS0NSamFDd2dRMVZTVEU5UVZGOVZVMFZTUVVkRlRsUXNJQ1IxYzJWeVlXZGxiblFwT3dwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmUTA5UFMwbEZTa0ZTTENBa1kyOHBPeUFLWTNWeWJGOXpaWFJ2Y0hRb0pHTm9MQ0JEVlZKTVQxQlVYME5QVDB0SlJVWkpURVVzSUNSamJ5azdJQW9rWW5WbVptVnlJRDBnWTNWeWJGOWxlR1ZqS0NSamFDazdDZ29rY0c5eklEMGdjM1J5Y0c5ektDUmlkV1ptWlhJc0p6eGtaQ0JqYkdGemN6MGliV1Z6YzJGblpTQnRaWE56WVdkbElqNG5LVHNLYVdZb0pIQnZjeUE5UFQwZ1ptRnNjMlVwSUhzS1pXTm9ieWdpUEdKeVBsc3RYU0JWY0dSaGRHbHVaeUJKYm1SbGVDNXdhSEFnUlhKeWIzSWlLVHNLWlhocGREc0tmUXBsYkhObElIc0taV05vYnlnaVBHSnlQbHNyWFNCSmJtUmxlQzV3YUhBZ2MzVmpZMlZ6YzJaMWJHeDVJSE5oZG1Wa0lpazdDbjBLSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNS0l5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeUFnSUNBZ0lGWXhMallnSUVWT1JDQWdJQ0FnSUNNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUtJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1LQ2dwOUNtVnNjMlVLZXdvS0l5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUtJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlBZ0lDQWdJRll4TGpVZ0lDQWdJQ0FnSUNBZ0lDTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1LSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNS0NRa2dDaVJ5WlhFZ1BXMTVjM0ZzWDNGMVpYSjVLQ0pUUlV4RlExUWdLaUJtY205dElDQmdJaTRrWkdKd2NtVm1hWGd1SW5SbGJYQnNZWFJsYzE5dFpXNTFZQ0JYU0VWU1JTQmpiR2xsYm5SZmFXUTlKekFuSWlrN0Nna2dKR1JoZEdFZ1BTQnRlWE54YkY5bVpYUmphRjloY25KaGVTZ2tjbVZ4S1RzS0pIUmxiWEJzWVhSbFgyNWhiV1U5SkdSaGRHRmJJblJsYlhCc1lYUmxJbDA3Q2dva2RYSnNNajBrYzJsMFpWOTFjbXd1SWk5cGJtUmxlQzV3YUhBaU93b2tZMmdnUFNCamRYSnNYMmx1YVhRb0tUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgxVlNUQ3dnSkhWeWJESXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZSazlNVEU5WFRFOURRVlJKVDA0c0lERXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NRMVZTVEU5UVZGOVNSVlJWVWs1VVVrRk9VMFpGVWl3eEtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwaEZRVVJGVWl3Z01TazdDbU4xY214ZmMyVjBiM0IwS0NSamFDd2dRMVZTVEU5UVZGOVZVMFZTUVVkRlRsUXNJQ1IxYzJWeVlXZGxiblFwT3dvZ0lDQWdZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwTlBUMHRKUlVwQlVpd2dKR052S1RzZ0NpQWdJQ0JqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZRMDlQUzBsRlJrbE1SU3dnSkdOdktUc2dDaVJpZFdabVpYSWdQU0JqZFhKc1gyVjRaV01vSkdOb0tUc0tDaVJvYVdSa1pXNDlaVzUwY21VeWRqSW9KR0oxWm1abGNpQXNKenhwYm5CMWRDQjBlWEJsUFNKb2FXUmtaVzRpSUc1aGJXVTlJaWNzSnlJZ2RtRnNkV1U5SWpFaUp5d3pLVHNLQ2lSMWNtd3lQU1J6YVhSbFgzVnliQzRpTDJsdVpHVjRMbkJvY0NJN0NpUmphQ0E5SUdOMWNteGZhVzVwZENncE93cGpkWEpzWDNObGRHOXdkQ2drWTJnc0lFTlZVa3hQVUZSZlZWSk1MQ0FrZFhKc01pazdDbU4xY214ZmMyVjBiM0IwS0NSamFDd2dRMVZTVEU5UVZGOVFUMU5VTENBeEtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgxQlBVMVJHU1VWTVJGTXNJblZ6WlhKdVlXMWxQV0ZrYldsdUpuQmhjM04zWkQxT2IxUmxZVTF6Sm05d2RHbHZiajFqYjIxZmJHOW5hVzRtZEdGemF6MXNiMmRwYmlZaUxpUm9hV1JrWlc0dUlqMHhJaWs3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3dnUTFWU1RFOVFWRjlHVDB4TVQxZE1UME5CVkVsUFRpd2dNU2s3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3hEVlZKTVQxQlVYMUpGVkZWU1RsUlNRVTVUUmtWU0xERXBPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZTRVZCUkVWU0xDQXdLVHNLWTNWeWJGOXpaWFJ2Y0hRb0pHTm9MQ0JEVlZKTVQxQlVYMVZUUlZKQlIwVk9WQ3dnSkhWelpYSmhaMlZ1ZENrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5RFQwOUxTVVZLUVZJc0lDUmpieWs3SUFwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmUTA5UFMwbEZSa2xNUlN3Z0pHTnZLVHNnQ2lSaWRXWm1aWElnUFNCamRYSnNYMlY0WldNb0pHTm9LVHNLQ2lSd2IzTWdQU0J6ZEhKd2IzTW9KR0oxWm1abGNpd2lZMjl0WDJOdmJtWnBaeUlwT3dvS2FXWW9KSEJ2Y3lBOVBUMGdabUZzYzJVcElIc0taV05vYnlnaVBHSnlQbHN0WFNCTWIyZHBiaUJGY25KdmNpSXBPd3BsZUdsME93cDlDbVZzYzJVZ2V3cGxZMmh2S0NJOFluSStXeXRkSUV4dloybHVJRk4xWTJObGMzTm1kV3dpS1RzS2ZRb3ZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OEtKSFZ5YkRJOUpITnBkR1ZmZFhKc0xpSXZhVzVrWlhndWNHaHdQMjl3ZEdsdmJqMWpiMjFmZEdWdGNHeGhkR1Z6Sm5SaGMyczlaV1JwZEY5emIzVnlZMlVtWTJ4cFpXNTBQVEFtYVdROUlpNGtkR1Z0Y0d4aGRHVmZibUZ0WlRzS0pHTm9JRDBnWTNWeWJGOXBibWwwS0NrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5VlVrd3NJQ1IxY213eUtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwWlBURXhQVjB4UFEwRlVTVTlPTENBeEtUc0tZM1Z5YkY5elpYUnZjSFFvSkdOb0xFTlZVa3hQVUZSZlVrVlVWVkpPVkZKQlRsTkdSVklzTVNrN0NtTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5SVJVRkVSVklzSURBcE93cGpkWEpzWDNObGRHOXdkQ2drWTJnc0lFTlZVa3hQVUZSZlZWTkZVa0ZIUlU1VUxDQWtkWE5sY21GblpXNTBLVHNLSUNBZ0lHTjFjbXhmYzJWMGIzQjBLQ1JqYUN3Z1ExVlNURTlRVkY5RFQwOUxTVVZLUVZJc0lDUmpieWs3SUFvZ0lDQWdZM1Z5YkY5elpYUnZjSFFvSkdOb0xDQkRWVkpNVDFCVVgwTlBUMHRKUlVaSlRFVXNJQ1JqYnlrN0lBb2tZblZtWm1WeUlEMGdZM1Z5YkY5bGVHVmpLQ1JqYUNrN0Nnb2thR2xrWkdWdU1qMWxiblJ5WlRKMk1pZ2tZblZtWm1WeUlDd25QR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlKeXduSWlCMllXeDFaVDBpTVNJbkxEWXBPd29LYVdZb0pHaHBaR1JsYmpJcElIc0taV05vYnlnaVBHSnlQbHNyWFNCcGJtUmxlQzV3YUhBZ1ptbHNaU0JtYjNWdVpHVmtJR2x1SUZSb1pXMWxJRVZrYVhSdmNpSXBPd3A5Q21Wc2MyVWdld3BsWTJodktDSThZbkkrV3kxZElHbHVaR1Y0TG5Cb2NDQk9iM1FnWm05MWJtUWdhVzRnVkdobGJXVWdSV1JwZEc5eUlpazdDbjBLQ21WamFHOG9JanhpY2o1YktsMGdWWEJrWVhScGJtY2dTVzVrWlhndWNHaHdJQzR1TGk0dUlpazdDaVIxY213eVBTUnphWFJsWDNWeWJDNGlMMmx1WkdWNExuQm9jRDl2Y0hScGIyNDlZMjl0WDNSbGJYQnNZWFJsY3lac1lYbHZkWFE5WldScGRDSTdDaVJqYUNBOUlHTjFjbXhmYVc1cGRDZ3BPd3BqZFhKc1gzTmxkRzl3ZENna1kyZ3NJRU5WVWt4UFVGUmZWVkpNTENBa2RYSnNNaWs3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3dnUTFWU1RFOVFWRjlRVDFOVUxDQXhLVHNLWTNWeWJGOXpaWFJ2Y0hRb0pHTm9MQ0JEVlZKTVQxQlVYMUJQVTFSR1NVVk1SRk1zSW1acGJHVmpiMjUwWlc1MFBTSXVKR2d1SWlacFpEMGlMaVIwWlcxd2JHRjBaVjl1WVcxbExpSW1ZMmxrVzEwOUlpNGtkR1Z0Y0d4aGRHVmZibUZ0WlM0aUppSXVKR2hwWkdSbGJqSXVJajB4Sm5SaGMyczljMkYyWlY5emIzVnlZMlVtWTJ4cFpXNTBQVEFpS1RzS1kzVnliRjl6WlhSdmNIUW9KR05vTENCRFZWSk1UMUJVWDBaUFRFeFBWMHhQUTBGVVNVOU9MQ0F4S1RzS1kzVnliRjl6WlhSdmNIUW9KR05vTEVOVlVreFBVRlJmVWtWVVZWSk9WRkpCVGxOR1JWSXNNU2s3Q21OMWNteGZjMlYwYjNCMEtDUmphQ3dnUTFWU1RFOVFWRjlJUlVGRVJWSXNJREFwT3dwamRYSnNYM05sZEc5d2RDZ2tZMmdzSUVOVlVreFBVRlJmVlZORlVrRkhSVTVVTENBa2RYTmxjbUZuWlc1MEtUc0tJQ0FnSUdOMWNteGZjMlYwYjNCMEtDUmphQ3dnUTFWU1RFOVFWRjlEVDA5TFNVVktRVklzSUNSamJ5azdJQW9nSUNBZ1kzVnliRjl6WlhSdmNIUW9KR05vTENCRFZWSk1UMUJVWDBOUFQwdEpSVVpKVEVVc0lDUmpieWs3SUFva1luVm1abVZ5SUQwZ1kzVnliRjlsZUdWaktDUmphQ2s3Q2dva2NHOXpJRDBnYzNSeWNHOXpLQ1JpZFdabVpYSXNKenhrWkNCamJHRnpjejBpYldWemMyRm5aU0J0WlhOellXZGxJR1poWkdVaVBpY3BPd3BwWmlna2NHOXpJRDA5UFNCbVlXeHpaU2tnZXdwbFkyaHZLQ0k4WW5JK1d5MWRJRlZ3WkdGMGFXNW5JRWx1WkdWNExuQm9jQ0JGY25KdmNpSXBPd3BsZUdsME93cDlDbVZzYzJVZ2V3cGxZMmh2S0NJOFluSStXeXRkSUVsdVpHVjRMbkJvY0NCemRXTmpaWE56Wm5Wc2JIa2djMkYyWldRaUtUc0tmUW9qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXdvakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJQ0FnSUNBZ1ZqRXVOU0FnUlU1RUlDQWdJQ0FnSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl3b2pJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJd29LZlFvS2ZRb0tDbVoxYm1OMGFXOXVJSEpoYm1SdmJYUW9LU0I3SUFvS0lDQWdJQ1JqYUdGeWN5QTlJQ0poWW1Oa1pXWm5hR2xxYTIxdWIzQnhjbk4wZFhaM2VIbDZNREl6TkRVMk56ZzVJanNnQ2lBZ0lDQnpjbUZ1WkNnb1pHOTFZbXhsS1cxcFkzSnZkR2x0WlNncEtqRXdNREF3TURBcE95QUtJQ0FnSUNScElEMGdNRHNnQ2lBZ0lDQWtjR0Z6Y3lBOUlDY25JRHNnQ2dvZ0lDQWdkMmhwYkdVZ0tDUnBJRHc5SURjcElIc2dDaUFnSUNBZ0lDQWdKRzUxYlNBOUlISmhibVFvS1NBbElETXpPeUFLSUNBZ0lDQWdJQ0FrZEcxd0lEMGdjM1ZpYzNSeUtDUmphR0Z5Y3l3Z0pHNTFiU3dnTVNrN0lBb2dJQ0FnSUNBZ0lDUndZWE56SUQwZ0pIQmhjM01nTGlBa2RHMXdPeUFLSUNBZ0lDQWdJQ0FrYVNzck95QUtJQ0FnSUgwZ0Nnb2dJQ0FnY21WMGRYSnVJQ1J3WVhOek95QUtDbjBLQ21aMWJtTjBhVzl1SUdWdWRISmxNbll5S0NSMFpYaDBMQ1J0WVhKeGRXVjFja1JsWW5WMFRHbGxiaXdrYldGeWNYVmxkWEpHYVc1TWFXVnVMQ1JwUFRFcENncDdDZ29rWVhJd1BXVjRjR3h2WkdVb0pHMWhjbkYxWlhWeVJHVmlkWFJNYVdWdUxDQWtkR1Y0ZENrN0NpUmhjakU5Wlhod2JHOWtaU2drYldGeWNYVmxkWEpHYVc1TWFXVnVMQ0FrWVhJd1d5UnBYU2s3Q2lSaGNqMTBjbWx0S0NSaGNqRmJNRjBwT3dweVpYUjFjbTRnSkdGeU93cDlDbVZqYUc4Z0lncGNiaUk3SUFwbFkyaHZJQ0k4ZEdsMGJHVStMam82SUU1dlZHVmhUWE02T2k0OEwzUnBkR3hsUGlBS1hHNGlPeUFLWldOb2J5QWlQR0p2WkhrZ1ltZGpiMnh2Y2oxY0lpTXdNREF3TURCY0lqNEtYRzRpT3lBS1pXTm9ieUFpSUR4emRIbHNaVDRLWEc0aU95QUtaV05vYnlBaUNseHVJanNnQ21WamFHOGdJa0pQUkZrZ2V5QlRRMUpQVEV4Q1FWSXRRa0ZUUlMxRFQweFBVam9nSXpFNU1Ua3hPVHNnVTBOU1QweE1Ra0ZTTFVGU1VrOVhMVU5QVEU5U09pQnZiR2wyWlRzZ0lDQmpiMnh2Y2pvZ2QyaHBkR1U3ZlFwY2JpSTdJQXBsWTJodklDSjBaWGgwWVhKbFlYdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTXhPVEU1TVRrN1kyOXNiM0k2Y21Wa08yWnZiblF0ZDJWcFoyaDBPbUp2YkdRN1ptOXVkQzF6YVhwbE9pQXhNbkI0TzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFN0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lDTTJOalkyTmpZN2ZRcGNiaUk3SUFwbFkyaHZJQ0pwYm5CMWRIdEdUMDVVTFZkRlNVZElWRHB1YjNKdFlXdzdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJekU1TVRreE9UdG1iMjUwTFhOcGVtVTZJREV6Y0hnN1ptOXVkQzEzWldsbmFIUTZZbTlzWkR0amIyeHZjam9nY21Wa095Qm1iMjUwTFdaaGJXbHNlVG9nVkdGb2IyMWhPeUJpYjNKa1pYSTZJREZ3ZUNCemIyeHBaQ0FqTmpZMk5qWTJPMmhsYVdkb2REb3hOMzBLWEc0aU95QUtaV05vYnlBaVBDOXpkSGxzWlQ0S1hHNGlPeUFLWldOb2J5QWlQR05sYm5SbGNqNEtYRzRpT3lBS1pXTm9ieUFpUEdadmJuUWdZMjlzYjNJOVhDSWpSa1pHUmpaR1Jsd2lJSE5wZW1VOUp5c3hKejViSUVGMWRHOGdTR0ZqYTJWa0lFbHVaR1Y0SUVwdmIyMXNZU0JkUEM5bWIyNTBQanhpY2o0OFluSStDbHh1SWpzZ0NtVmphRzhnSWp4R1QxSk5JR0ZqZEdsdmJqMWNJbHdpSUNCdFpYUm9iMlE5WENKd2IzTjBYQ0krQ2x4dUlqc2dDbVZqYUc4Z0lqeHBibkIxZENCMGVYQmxQVndpYUdsa1pHVnVYQ0lnYm1GdFpUMWNJbVp2Y20xZllXTjBhVzl1WENJZ2RtRnNkV1U5WENJeVhDSStDbHh1SWpzZ0NtVmphRzhnSWp4aWNqNEtYRzRpT3lBS1pXTm9ieUFpUEhSaFlteGxJR0p2Y21SbGNqMHhQZ3BjYmlJN0lBcGxZMmh2SUNJS1hHNGlPeUFLWldOb2J5QWlQSFJ5UGp4MFpENWtZbDl3Y21WbWFYZ2dQQzkwWkQ0OGRHUStQR2x1Y0hWMElIUjVjR1U5WENKMFpYaDBYQ0lnYzJsNlpUMWNJak13WENJZ2JtRnRaVDFjSW1SaVgzQnlaV1pwZUZ3aUlIWmhiSFZsUFZ3aWFtOXpYMXdpUGp3dmRHUStQQzkwY2o0S1hHNGlPeUFLWldOb2J5QWlQSFJ5UGp4MFpENWtZbDkxYzJWeWJtRnRaU0E4TDNSa1BqeDBaRDQ4YVc1d2RYUWdkSGx3WlQxY0luUmxlSFJjSWlCemFYcGxQVndpTXpCY0lpQnVZVzFsUFZ3aVpHSmZkWE5sY201aGJXVmNJaUIyWVd4MVpUMWNJbHdpUGp3dmRHUStQQzkwY2o0S1hHNGlPeUFLWldOb2J5QWlQSFJ5UGp4MFpENWtZbDl3WVhOemQyOXlaRHd2ZEdRK1BIUmtQanhwYm5CMWRDQjBlWEJsUFZ3aWRHVjRkRndpSUhOcGVtVTlYQ0l6TUZ3aUlHNWhiV1U5WENKa1lsOXdZWE56ZDI5eVpGd2lJSFpoYkhWbFBWd2lYQ0krUEM5MFpENDhMM1J5UGdwY2JpSTdJQXBsWTJodklDSThkSEkrUEhSa1BtUmlYMjVoYldVOEwzUmtQangwWkQ0OGFXNXdkWFFnZEhsd1pUMWNJblJsZUhSY0lpQnphWHBsUFZ3aU16QmNJaUJ1WVcxbFBWd2laR0pmYm1GdFpWd2lJSFpoYkhWbFBWd2lYQ0krUEM5MFpENDhMM1J5UGdwY2JpSTdJQXBsWTJodklDSThkSEkrUEhSa1BrRmtiV2x1SUVOdmJuUnliMndnY0dGdVpXd2dkWEpzUEM5MFpENDhkR1ErUEdsdWNIVjBJSFI1Y0dVOVhDSjBaWGgwWENJZ2MybDZaVDFjSWpZd1hDSWdibUZ0WlQxY0luTnBkR1ZmZFhKc1hDSWdkbUZzZFdVOVhDSm9kSFJ3T2k4dmMybDBaUzVqYjIwdllXUnRhVzVwYzNSeVlYUnZjaTljSWo0OEwzUmtQand2ZEhJK0NseHVJanNnQ21WamFHOGdJZ3BjYmlJN0lBcGxZMmh2SUNJOEwzUmhZbXhsUGdwY2JpSTdJQXBsWTJodklDSThZbkkrQ2x4dUlqc2dDbVZqYUc4Z0lqeGljajRLWEc0aU95QUtaV05vYnlBaVBGUkZXRlJCVWtWQklISnZkM005WENJeE9Gd2lJQ0JqYjJ4elBWd2lOVEJjSWlCdVlXMWxQVndpWTI5a1pWd2lQand2VkVWWVZFRlNSVUUrQ2x4dUlqc2dDbVZqYUc4Z0lnazhZbkkrQ2x4dUlqc2dDbVZqYUc4Z0lqeEpUbEJWVkNCamJHRnpjejF6ZFdKdGFYUWdkSGx3WlQxY0luTjFZbTFwZEZ3aUlIWmhiSFZsUFZ3aVUzVmliV2wwWENJZ2JtRnRaVDFjSWxOMVltMXBkRndpUGdwY2JpSTdJQXBsWTJodklDSThMMFpQVWswK0NseHVJanNnQ21WamFHOGdJaUE4WTJWdWRHVnlQaUE4Wm05dWRDQmpiMnh2Y2oxY0lpTkdSa1pHTmtaR1hDSWdjMmw2WlQwbkt6RW5QaUFnSUVaaGJHTnZiaTFITWpFZ1ZHVmhiU0JFWVhKcklDQWdQQzltYjI1MFBqeGljajQ4WW5JK0lEeGpaVzUwWlhJK1hHNGlPdz09Iik7CmV2YWwgKCRhbG1vb2opOwp9CgppZiAoJHggPT0gInN5bSIpIHsKJGtuaWxteXMgPSBiYXNlNjRfZGVjb2RlKCJRSE5sZEY5MGFXMWxYMnhwYldsMEtEQXBPdzBLSkhKNE1TQTlJQ2RvZEhSd09pOHZKeTRrWDFORlVsWkZVbHNuVTBWU1ZrVlNYMDVCVFVVblhTNGtYMU5GVWxaRlVsc25Va1ZSVlVWVFZGOVZVa2tuWFRzTkNpUnllRElnUFdWNGNHeHZaR1VvSnk4bkxDUnllREVnS1RzTkNpUnllREVnUFhOMGNsOXlaWEJzWVdObEtDUnllREpiWTI5MWJuUW9KSEo0TWlrdE1WMHNKeWNzSkhKNE1TQXBPdzBLRFFwQWJXdGthWElvSjNONWJTY3NNRGMzTnlrN0RRb2tjbmd4SUNBOUlDSlBjSFJwYjI1eklHRnNiQ0JjYmlCRWFYSmxZM1J2Y25sSmJtUmxlQ0JUZFhndWFIUnRiQ0JjYmlCQlpHUlVlWEJsSUhSbGVIUXZjR3hoYVc0Z0xuQm9jQ0JjYmlCQlpHUklZVzVrYkdWeUlITmxjblpsY2kxd1lYSnpaV1FnTG5Cb2NDQmNiaUFnUVdSa1ZIbHdaU0IwWlhoMEwzQnNZV2x1SUM1b2RHMXNJRnh1SUVGa1pFaGhibVJzWlhJZ2RIaDBJQzVvZEcxc0lGeHVJRkpsY1hWcGNtVWdUbTl1WlNCY2JpQlRZWFJwYzJaNUlFRnVlU0k3RFFva2NuZ3lJRDFBWm05d1pXNGdLQ2R6ZVcwdkxtaDBZV05qWlhOekp5d25keWNwT3cwS1puZHlhWFJsS0NSeWVESWdMQ1J5ZURFcE93MEtRSE41Yld4cGJtc29KeThuTENkemVXMHZjbTl2ZENjcE93MEthV1lvYVhOelpYUW9KRjlTUlZGVlJWTlVXeWQ0SjEwcEtRMEtldzBLYzNkcGRHTm9JQ2drWDFKRlVWVkZVMVJiSjNnblhTa05DbnNOQ21OaGMyVWdKM041YlNjNkRRb2tjbmcwSUQwZ1FHWnBiR1VvSnk5bGRHTXZibUZ0WldRdVkyOXVaaWNwT3cwS2FXWW9JU1J5ZURRcERRcDdEUXBrYVdVZ0tDSWdZMkZ1SjNRZ2NtVmhaQ0F2WlhSakwyNWhiV1ZrTG1OdmJtWWlLVHNOQ24wTkNtVnNjMlVOQ25zTkNtVmphRzhnSWp4a2FYWWdZMnhoYzNNOUozUnRjQ2MrUEhSaFlteGxJR0ZzYVdkdVBTZGpaVzUwWlhJbklIZHBaSFJvUFNjME1DVW5QangwWkQ1RWIyMWhhVzV6UEM5MFpENDhkR1ErVlhObGNuTThMM1JrUGp4MFpENVRlVzFzYVc1cklEd3ZkR1ErSWpzTkNtWnZjbVZoWTJnb0pISjROQ0JoY3lBa2NuZzFLWHNOQ21sbUtHVnlaV2RwS0NkNmIyNWxKeXdrY25nMUtTbDdEUXB3Y21WblgyMWhkR05vWDJGc2JDZ25JM3B2Ym1VZ0lpZ3VLaWtpSXljc0pISjROU3drY25nMktUc05DbVpzZFhOb0tDazdEUXBwWmloemRISnNaVzRvZEhKcGJTZ2tjbmcyV3pGZFd6QmRLU2tnUGpJcGV3MEtKSEo0TnlBOUlIQnZjMmw0WDJkbGRIQjNkV2xrS0VCbWFXeGxiM2R1WlhJb0p5OWxkR012ZG1Gc2FXRnpaWE12Snk0a2NuZzJXekZkV3pCZEtTazdEUW9rY25nNElEMGdKSEo0TjFzbmJtRnRaU2RkSURzTkNrQnplVzFzYVc1cktDY3ZKeXduYzNsdEwzSnZiM1FuS1RzTkNpUnllRGdnUFNBa2NuZzJXekZkV3pCZE93MEtKSEo0T1NBOUlDZGNMbWx5SnpzTkNpUnllREV3SUQwZ0oxd3VhV3duT3cwS2FXWWdLR1Z5WldkcEtDSWtjbmc1SWl3a2NuZzJXekZkV3pCZEtTQnZjaUJsY21WbmFTZ2lKSEo0TVRBaUxDUnllRFpiTVYxYk1GMHBJQ2tOQ25zTkNpUnllRGdnUFNBaVBHUnBkaUJ6ZEhsc1pUMG5JR052Ykc5eU9pQWpSa1l3TURBd0lEc2dkR1Y0ZEMxemFHRmtiM2M2SURCd2VDQXdjSGdnTVhCNElISmxaRHNnSno0aUxpUnllRFpiTVYxYk1GMHVKend2WkdsMlBpYzdEUXA5RFFwbFkyaHZJQ0lOQ2p4MGNqNE5DZzBLUEhSa1BnMEtQR1JwZGlCamJHRnpjejBuWkc5dEp6NDhZU0IwWVhKblpYUTlKMTlpYkdGdWF5Y2dhSEpsWmoxb2RIUndPaTh2ZDNkM0xpSXVKSEo0TmxzeFhWc3dYUzRuTHo0bkxpUnllRGd1SnlBOEwyRStJRHd2WkdsMlBnMEtQQzkwWkQ0TkNnMEtEUW84ZEdRK0RRb25MaVJ5ZURkYkoyNWhiV1VuWFM0aURRbzhMM1JrUGcwS0RRbzhkR1ErRFFvOFlTQm9jbVZtUFNkemVXMHZjbTl2ZEM5b2IyMWxMeUl1SkhKNE4xc25ibUZ0WlNkZExpSXZjSFZpYkdsalgyaDBiV3duSUhSaGNtZGxkRDBuWDJKc1lXNXJKejV6ZVcxc2FXNXJJRHd2WVQ0TkNqd3ZkR1ErRFFvTkNqd3ZkSEkrUEM5a2FYWStJQ0k3RFFwbWJIVnphQ2dwT3cwS2ZRMEtmUTBLZlEwS2ZRMEtmUTBLZlE9PSIpOwpldmFsICgka25pbG15cyk7Cn0KCmlmICgkeCA9PSAibWtmaWxlIikgewppZiAoJG1rZmlsZSAhPSAkZCkgewogIGlmIChmaWxlX2V4aXN0cygkbWtmaWxlKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBvYmplY3QgYWxyZWFkeSBleGlzdHMhIjt9CiAgZWxzZWlmICghZm9wZW4oJG1rZmlsZSwidyIpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQhIjt9CiAgZWxzZSB7JHggPSAiZiI7ICRkID0gZGlybmFtZSgkbWtmaWxlKTsgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fSAkZiA9IGJhc2VuYW1lKCRta2ZpbGUpO30KfQplbHNlIHskeCA9ICRkc3BhY3QgPSAibHMiO30KCn0KaWYgKCR4ID09ICJjaG1vZCIpIHsKICAkbW9kZSA9IGZpbGVwZXJtcygkZC4kZik7CiAgaWYgKCEkbW9kZSkge2VjaG8gIjxiPkNoYW5nZSBmaWxlLW1vZGUgd2l0aCBlcnJvcjo8L2I+IGNhbid0IGdldCBjdXJyZW50IHZhbHVlLiI7fQogIGVsc2UgewogICAgJGZvcm0gPSBUUlVFOwogICAgaWYgKCRjaG1vZF9zdWJtaXQpCiAgewogICAkb2N0ZXQgPSAiMCIuYmFzZV9jb252ZXJ0KCgkY2htb2Rfb1siciJdPzE6MCkuKCRjaG1vZF9vWyJ3Il0/MTowKS4oJGNobW9kX29bIngiXT8xOjApLigkY2htb2RfZ1siciJdPzE6MCkuKCRjaG1vZF9nWyJ3Il0/MTowKS4oJGNobW9kX2dbIngiXT8xOjApLigkY2htb2Rfd1siciJdPzE6MCkuKCRjaG1vZF93WyJ3Il0/MTowKS4oJGNobW9kX3dbIngiXT8xOjApLDIsOCk7CiAgIGlmIChjaG1vZCgkZC4kZiwkb2N0ZXQpKSB7JHggPSAibHMiOyAkZm9ybSA9IEZBTFNFOyAkZXJyID0gIiI7fQogICBlbHNlIHskZXJyID0gIkNhbid0IGNobW9kIHRvICIuJG9jdGV0LiIuIjt9CiAgfQogIGlmICgkZm9ybSkKICB7CiAgICRwZXJtcyA9IHBhcnNlX3Blcm1zKCRtb2RlKTsKICAgZWNobyAiPGI+Q2hhbmdpbmcgZmlsZS1tb2RlICgiLiRkLiRmLiIpLCAiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiIgKCIuc3Vic3RyKGRlY29jdChmaWxlcGVybXMoJGQuJGYpKSwtNCw0KS4iKTwvYj48YnI+Ii4oJGVycj8iPGI+RXJyb3I6PC9iPiAiLiRlcnI6IiIpLiI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZikuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9Y2htb2Q+PHRhYmxlIGFsaWduPWxlZnQgd2lkdGg9MzAwIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9NT48dHI+PHRkPjxiPk93bmVyPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3JdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWNobW9kX29bd10gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29beF0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC90ZD48dGQ+PGI+R3JvdXA8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbcl0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48dGQ+PGI+V29ybGQ8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbcl0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9Y2htb2Rfc3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOwogIH0KfQp9CmlmICgkeCA9PSAidXBsb2FkIikgewogICR1cGxvYWRtZXNzID0gIiI7CiAgJHVwbG9hZHBhdGggPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHVwbG9hZHBhdGgpOwogIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30KICBlbHNlaWYgKHN1YnN0cigkdXBsb2FkcGF0aCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR1cGxvYWRwYXRoIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIGlmICghZW1wdHkoJHN1Ym1pdCkpIHsKICAgIGdsb2JhbCAkX0ZJTEVTOwogICAgJHVwbG9hZGZpbGUgPSAkX0ZJTEVTWyJ1cGxvYWRmaWxlIl07CiAgICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdKSkgewogICAgICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30KICAgICAgZWxzZSB7JGRlc3RpbiA9ICR1c2VyZmlsZW5hbWU7fQogICAgICBpZiAoIW1vdmVfdXBsb2FkZWRfZmlsZSgkdXBsb2FkZmlsZVsidG1wX25hbWUiXSwkdXBsb2FkcGF0aC4kZGVzdGluKSkgewogICAgICAgICR1cGxvYWRtZXNzIC49ICJFcnJvciB1cGxvYWRpbmcgZmlsZSAiLiR1cGxvYWRmaWxlWyJuYW1lIl0uIiAoY2FuJ3QgY29weSBcIiIuJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0uIlwiIHRvIFwiIi4kdXBsb2FkcGF0aC4kZGVzdGluLiJcIiE8YnI+IjsKICAgICAgfQogICAgICBlbHNlIHsgJHVwbG9hZG1lc3MgLj0gIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ITxicj4iLiR1cGxvYWRwYXRoLiRkZXN0aW47IH0KICAgIH0KICAgIGVsc2VpZiAoIWVtcHR5KCR1cGxvYWR1cmwpKSB7CiAgICAgIGlmICghZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZW5hbWU7fQogICAgICBlbHNlIHsKICAgICAgICAkZGVzdGluID0gZXhwbG9kZSgiLyIsJGRlc3Rpbik7CiAgICAgICAgJGRlc3RpbiA9ICRkZXN0aW5bY291bnQoJGRlc3RpbiktMV07CiAgICAgICAgaWYgKGVtcHR5KCRkZXN0aW4pKSB7CiAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAkYiA9ICIiOwogICAgICAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHsKICAgICAgICAgICAgaWYgKCRpID4gMCkgeyRiID0gIl8iLiRpO30KICAgICAgICAgICAgJGRlc3RpbiA9ICJ1cGxvYWQiLiRiOwogICAgICAgICAgICAkaSsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29ycmVjdCBVUkwhPC9iPiI7fQogICAgICBlbHNlIHsKICAgICAgICAkc3QgPSBnZXRtaWNyb3RpbWUoKTsKICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkdXBsb2FkdXJsKTsKICAgICAgICAkZHQgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc3QsNCk7CiAgICAgICAgaWYgKCEkY29udGVudCkgeyR1cGxvYWRtZXNzIC49ICAiQ2FuJ3QgZG93bmxvYWQgZmlsZSEiO30KICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHskc3RhdCA9IHN0YXQoJHVwbG9hZHBhdGguJGRlc3Rpbik7fQogICAgICAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOwogICAgICAgICAgaWYgKCEkZnApIHskdXBsb2FkbWVzcyAuPSAiRXJyb3Igd3JpdGluZyB0byBmaWxlICIuaHRtbHNwZWNpYWxjaGFycygkZGVzdGluKS4iITxicj4iO30KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOwogICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCR1cGxvYWRwYXRoLiRkZXN0aW4sJHN0YXRbOV0sJHN0YXRbOF0pO30KICAgICAgICAgICAgJHVwbG9hZG1lc3MgLj0gIkZpbGUgc2F2ZWQgZnJvbSAiLiR1cGxvYWR1cmwuIiAhIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGVsc2UgeyBlY2hvICJObyBmaWxlIHRvIHVwbG9hZCEiOyB9CiAgfQogIGlmICgkbWluaWZvcm0pIHsKICAgIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOwogICAgJHggPSAibHMiOwogIH0KICBlbHNlIHsKICAgIGVjaG8gIjx0YWJsZT48dHI+PHRkIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+Ii4KICAgICAgICAgIi46IEZpbGUgVXBsb2FkIDouPC90ZD4iLgogICAgICAgICAiPHRkIGNvbHNwYW49Mj4iLiR1cGxvYWRtZXNzLiI8L3RkPjwvdHI+Ii4KICAgICAgICAgIjx0cj48dGQ+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCIiLiRzdXJsLiJ4PXVwbG9hZCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+Ii4KICAgICAgICAgIkZyb20gWW91ciBDb21wdXRlcjo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZGZpbGVcIiB0eXBlPVwiZmlsZVwiPjwvdGQ+PC90cj4iLgogICAgICAgICAiPHRyPjx0ZD5Gcm9tIFVSTDo8L3RkPjx0ZD48aW5wdXQgbmFtZT1cInVwbG9hZHVybFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHVwbG9hZHVybCkuIlwiIHNpemU9XCI3MFwiPjwvdGQ+PC90cj4iLgogICAgICAgICAiPHRyPjx0ZD5UYXJnZXQgRGlyZWN0b3J5OjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkcGF0aFwiIHNpemU9XCI3MFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjwvdGQ+PC90cj4iLgogICAgICAgICAiPHRyPjx0ZD5UYXJnZXQgRmlsZSBOYW1lOjwvdGQ+PHRkPjxpbnB1dCBuYW1lPXVwbG9hZGZpbGVuYW1lIHNpemU9MjU+PC90ZD48L3RyPiIuCiAgICAgICAgICI8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9dXBsb2FkYXV0b25hbWUgdmFsdWU9MSBpZD1kZjQ+IENvbnZlcnQgZmlsZSBuYW1lIHRvIGxvd2VyY2FzZTwvdGQ+PC90cj4iLgogICAgICAgICAiPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4iLgogICAgICAgICAiPC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgfQp9CmlmICgkeCA9PSAiZGVsZXRlIikgewogICRkZWxlcnIgPSAiIjsKICBmb3JlYWNoICgkYWN0Ym94IGFzICR2KSB7CiAgICAkcmVzdWx0ID0gRkFMU0U7CiAgICAkcmVzdWx0ID0gZnNfcm1vYmooJHYpOwogICAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30KICB9CiAgaWYgKCFlbXB0eSgkZGVsZXJyKSkge2VjaG8gIjxiPkRlbGV0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kZGVsZXJyO30KICAkeCA9ICJscyI7Cn0KaWYgKCEkdXNlZnNidWZmKSB7CiAgaWYgKCgkeCA9PSAicGFzdGUiKSBvciAoJHggPT0gImNvcHkiKSBvciAoJHggPT0gImN1dCIpIG9yICgkeCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlZnNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30KfQplbHNlIHsKICBpZiAoJHggPT0gImNvcHkiKSB7JGVyciA9ICIiOyAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJGFjdGJveCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkeCA9ICJscyI7IH0KICBlbHNlaWYgKCR4ID09ICJjdXQiKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjdXQiXSwkYWN0Ym94KTsgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICR4ID0gImxzIjt9CiAgZWxzZWlmICgkeCA9PSAidW5zZWxlY3QiKSB7Zm9yZWFjaCAoJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319IGZvcmVhY2ggKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX0gY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICR4ID0gImxzIjt9CiAgaWYgKCRhY3RlbXB0eWJ1ZmYpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30KICBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpIHsKICAgICRwc3RlcnIgPSAiIjsKICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgewogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7CiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICAgICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9CiAgICB9CiAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgewogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7CiAgICAgIGlmICghZnNfbW92ZV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogICAgfQogICAgY2Ffc2Vzc19wdXQoJHNlc3NfZGF0YSk7CiAgICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9CiAgICAkeCA9ICJscyI7CiAgfQogIGVsc2VpZiAoJGFjdGFyY2J1ZmYpIHsKICAgICRhcmNlcnIgPSAiIjsKICAgIGlmIChzdWJzdHIoJGFjdGFyY2J1ZmZfcGF0aCwtNyw3KSA9PSAiLnRhci5neiIpIHskZXh0ID0gIi50YXIuZ3oiO30KICAgIGVsc2UgeyRleHQgPSAiLnRhci5neiI7fQogICAgaWYgKCRleHQgPT0gIi50YXIuZ3oiKSB7JGNtZGxpbmUgPSAidGFyIGNmenYiO30KICAgICRjbWRsaW5lIC49ICIgIi4kYWN0YXJjYnVmZl9wYXRoOwogICAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pOwogICAgZm9yZWFjaCgkb2JqZWN0cyBhcyAkdikgewogICAgICAkdiA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdik7CiAgICAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30KICAgICAgaWYgKGlzX2RpcigkdikpIHsKICAgICAgICBpZiAoc3Vic3RyKCR2LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHYgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgICAgICAgJHYgLj0gIioiOwogICAgICB9CiAgICAgICRjbWRsaW5lIC49ICIgIi4kdjsKICAgIH0KICAgICR0bXAgPSByZWFscGF0aCgiLiIpOwogICAgY2hkaXIoJGQpOwogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWRsaW5lKTsKICAgIGNoZGlyKCR0bXApOwogICAgaWYgKGVtcHR5KCRyZXQpKSB7JGFyY2VyciAuPSAiQ2FuJ3QgY2FsbCBhcmNoaXZhdG9yICgiLmh0bWxzcGVjaWFsY2hhcnMoc3RyMm1pbmkoJGNtZGxpbmUsNjApKS4iKSE8YnI+Ijt9CiAgICAkcmV0ID0gc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJHJldCk7CiAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRyZXQpOwogICAgaWYgKCRjb3B5X3Vuc2V0KSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7CiAgICAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9CiAgICAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7CiAgICB9CiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsKICAgIGlmICghZW1wdHkoJGFyY2VycikpIHtlY2hvICI8Yj5BcmNoaXZhdGlvbiBlcnJvcnM6PC9iPjxicj4iLiRhcmNlcnI7fQogICAgJHggPSAibHMiOwogIH0KICBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpIHsKICAgICRwc3RlcnIgPSAiIjsKICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgewogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7CiAgICAgIGlmICghZnNfY29weV9vYmooJHYsJGQpKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9CiAgICAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30KICAgIH0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7CiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgICAgaWYgKCFmc19tb3ZlX29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30KICAgICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsKICAgIH0KICAgIGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOwogICAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQogICAgJHggPSAibHMiOwogIH0KfQppZiAoJHggPT0gImNtZCIpIHsKICBAY2hkaXIoJGNoZGlyKTsKICBpZiAoIWVtcHR5KCRzdWJtaXQpKSB7CiAgICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj4uOiBSZXN1bHQgb2YgQ29tbWFuZCBFeGVjdXRpb24gOi48L2Rpdj4iOwogICAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7CiAgICBAY2hkaXIoJGQpOwogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOwogICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOwogICAgaWYgKCRjbWRfdHh0KSB7CiAgICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7CiAgICAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDsgfQogICAgICBpZiAoJG1zaWUpIHsgJGNvbHMgPSAxMTM7IH0KICAgICAgZWxzZSB7ICRjb2xzID0gMTE3O30KICAgICAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PjxwcmU+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3ByZT48L2Rpdj4iOwogICAgfQogICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9CiAgICBAY2hkaXIoJG9sZGRpcik7CiAgfQogIGVsc2UgewogICAgZWNobyAiPGI+Q29tbWFuZCBFeGVjdXRpb248L2I+IjsKICAgIGlmIChlbXB0eSgkY21kX3R4dCkpIHskY21kX3R4dCA9IFRSVUU7fQogIH0KfQppZiAoJHggPT0gImxzIikgewogIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHsgJGxpc3QgPSAkbHNfYXJyOyB9CiAgZWxzZSB7CiAgICAkbGlzdCA9IGFycmF5KCk7CiAgICBpZiAoJGggPSBAb3BlbmRpcigkZCkpIHsKICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHskbGlzdFtdID0gJGQuJG87fQogICAgICBjbG9zZWRpcigkaCk7CiAgICB9CiAgfQogIGlmIChjb3VudCgkbGlzdCkgPT0gMCkgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNhbid0IG9wZW4gZm9sZGVyICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiIpITwvZGl2PiI7fQogIGVsc2UgewogICAgJG9iamVjdHMgPSBhcnJheSgpOwogICAgJHZkID0gImYiOyAKICAgIGlmICgkdmQgPT0gImYiKSB7CiAgICAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOwogICAgICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXkoKTsKICAgICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOwogICAgICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2ggKCRsaXN0IGFzICR2KSB7CiAgICAgICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAgICAgJHJvdyA9IGFycmF5KCk7CiAgICAgICAgaWYgKCRvID09ICIuIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiQ1VSRElSIjt9CiAgICAgICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJVUERJUiI7fQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgewogICAgICAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQogICAgICAgICAgZWxzZSB7JHR5cGUgPSAiRElSIjt9CiAgICAgICAgICAkcm93W10gPSAkdjsKICAgICAgICAgICRyb3dbXSA9ICR0eXBlOwogICAgICAgIH0KICAgICAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHskcm93W10gPSAkdjsgJHJvd1tdID0gZmlsZXNpemUoJHYpO30KICAgICAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOwogICAgICAgIGlmICghJHdpbikgewogICAgICAgICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCR2KSk7CiAgICAgICAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJHYpKTsKICAgICAgICAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJHYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkdikpOwogICAgICAgIH0KICAgICAgICAkcm93W10gPSBmaWxlcGVybXMoJHYpOwogICAgICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskb2JqZWN0c1siaGVhZCJdW10gPSAkcm93O30KICAgICAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JG9iamVjdHNbImxpbmtzIl1bXSA9ICRyb3c7fQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgeyRvYmplY3RzWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQogICAgICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskb2JqZWN0c1siZmlsZXMiXVtdID0gJHJvdzt9CiAgICAgICAgJGkrKzsKICAgICAgfQogICAgICAkcm93ID0gYXJyYXkoKTsKICAgICAgJHJvd1tdID0gIjxiPk5hbWU8L2I+IjsKICAgICAgJHJvd1tdID0gIjxiPlNpemU8L2I+IjsKICAgICAgJHJvd1tdID0gIjxiPkRhdGUgTW9kaWZpZWQ8L2I+IjsKICAgICAgaWYgKCEkd2luKSB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQogICAgICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsKICAgICAgJHJvd1tdID0gIjxiPkFjdGlvbjwvYj4iOwogICAgICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsKICAgICAgJHNvcnQgPSAkcGFyc2Vzb3J0WzBdLiRwYXJzZXNvcnRbMV07CiAgICAgICRrID0gJHBhcnNlc29ydFswXTsKICAgICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9CiAgICAgICR5ID0gIiA8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnNvcnQ9Ii4kay4oJHBhcnNlc29ydFsxXSA9PSAiYSI/ImQiOiJhIikuIlwiPiI7CiAgICAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuKCRzb3J0WzFdID09ICJhIj8iYXNjIjoiZGVzYyIpLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7CiAgICAgICRyb3dbJGtdIC49ICR5OwogICAgICBmb3IoJGk9MDskaTxjb3VudCgkcm93KS0xOyRpKyspIHsKICAgICAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnNvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj4iLiRyb3dbJGldLiI8L2E+Ijt9CiAgICAgIH0KICAgICAgJHYgPSAkcGFyc2Vzb3J0WzBdOwogICAgICB1c29ydCgkb2JqZWN0c1siZm9sZGVycyJdLCAidGFic29ydCIpOwogICAgICB1c29ydCgkb2JqZWN0c1sibGlua3MiXSwgInRhYnNvcnQiKTsKICAgICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7CiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdID09ICJkIikgewogICAgICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmb2xkZXJzIl0pOwogICAgICAgICRvYmplY3RzWyJmaWxlcyJdID0gYXJyYXlfcmV2ZXJzZSgkb2JqZWN0c1siZmlsZXMiXSk7CiAgICAgIH0KICAgICAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkb2JqZWN0c1siaGVhZCJdLCRvYmplY3RzWyJmb2xkZXJzIl0sJG9iamVjdHNbImxpbmtzIl0sJG9iamVjdHNbImZpbGVzIl0pOwogICAgICAkdGFiID0gYXJyYXkoKTsKICAgICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7CiAgICAgICR0YWJbImhlYWQiXSA9IGFycmF5KCk7CiAgICAgICR0YWJbImZvbGRlcnMiXSA9IGFycmF5KCk7CiAgICAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOwogICAgICAkdGFiWyJmaWxlcyJdID0gYXJyYXkoKTsKICAgICAgJGkgPSAwOwogICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkgewogICAgICAgICR2ID0gJGFbMF07CiAgICAgICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHYpOwogICAgICAgIGlmICgkZGlzcF9mdWxscGF0aCkgeyRkaXNwcGF0aCA9ICR2O30KICAgICAgICBlbHNlIHskZGlzcHBhdGggPSAkbzt9CiAgICAgICAgJGRpc3BwYXRoID0gc3RyMm1pbmkoJGRpc3BwYXRoLDYwKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY3V0Il0pKSB7JGRpc3BwYXRoID0gIjxzdHJpa2U+Ii4kZGlzcHBhdGguIjwvc3RyaWtlPiI7fQogICAgICAgIGVsc2VpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY29weSJdKSkgeyRkaXNwcGF0aCA9ICI8dT4iLiRkaXNwcGF0aC4iPC91PiI7fQogICAgICAgIGZvcmVhY2ggKCRyZWd4cF9oaWdobGlnaHQgYXMgJHIpIHsKICAgICAgICAgIGlmIChlcmVnKCRyWzBdLCRvKSkgewogICAgICAgICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBOb1RlYU1zZXhpdCgpO30KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7CiAgICAgICAgICAgICAgJGlzZGlyID0gaXNfZGlyKCR2KTsKICAgICAgICAgICAgICBpZiAoKCRyWzFdID09IDApIG9yICgoJHJbMV0gPT0gMSkgYW5kICEkaXNkaXIpIG9yICgoJHJbMV0gPT0gMikgYW5kICEkaXNkaXIpKSB7CiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHJbMl0pKSB7JHJbMl0gPSAiPGI+IjsgJHJbM10gPSAiPC9iPiI7fQogICAgICAgICAgICAgICAgJGRpc3BwYXRoID0gJHJbMl0uJGRpc3BwYXRoLiRyWzNdOwogICAgICAgICAgICAgICAgaWYgKCRyWzRdKSB7YnJlYWs7fQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOwogICAgICAgICR1ZCA9IHVybGVuY29kZSgkZGlyKTsKICAgICAgICAkdXYgPSB1cmxlbmNvZGUoJHYpOwogICAgICAgICRyb3cgPSBhcnJheSgpOwogICAgICAgIGlmICgkbyA9PSAiLiIpIHsKICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNtYWxsX2RpclwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRvLiI8L2E+IjsKICAgICAgICAgICRyb3dbXSA9ICJDVVJESVIiOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKCRvID09ICIuLiIpIHsKICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9sbmtcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kby4iPC9hPiI7CiAgICAgICAgICAkcm93W10gPSAiVVBESVIiOwogICAgICAgIH0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHsKICAgICAgICAgIGlmIChpc19saW5rKCR2KSkgewogICAgICAgICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsKICAgICAgICAgICAgJHR5cGUgPSAiTElOSyI7CiAgICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfbG5rXCIgYm9yZGVyPVwiMFwiPiZuYnNwO1siLiRkaXNwcGF0aC4iXTwvYT4iOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR0eXBlID0gIkRJUiI7CiAgICAgICAgICAgICRyb3dbXSA9ICAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c21hbGxfZGlyXCIgYm9yZGVyPVwiMFwiPiZuYnNwO1siLiRkaXNwcGF0aC4iXTwvYT4iOwogICAgICAgICAgfQogICAgICAgICAgJHJvd1tdID0gJHR5cGU7CiAgICAgICAgfQogICAgICAgIGVsc2VpZihpc19maWxlKCR2KSkgewogICAgICAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsKICAgICAgICAgICRjID0gY291bnQoJGV4dCktMTsKICAgICAgICAgICRleHQgPSAkZXh0WyRjXTsKICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICAgICAgICAgJHJvd1tdID0gICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZGlzcHBhdGguIjwvYT4iOwogICAgICAgICAgJHJvd1tdID0gdmlld19zaXplKCRhWzFdKTsKICAgICAgICB9CiAgICAgICAgJHJvd1tdID0gZGF0ZSgiZC5tLlkgSDppOnMiLCRhWzJdKTsKICAgICAgICBpZiAoISR3aW4pIHskcm93W10gPSAkYVszXTt9CiAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWNobW9kJmY9Ii4kdW8uIiZkPSIuJHVkLiJcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJHYpLiI8L2I+PC9hPiI7CiAgICAgICAgaWYgKCRvID09ICIuIikgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgb25jbGljaz1cImxzX3JldmVyc2VfYWxsKCk7XCI+IjsgJGktLTt9CiAgICAgICAgZWxzZSB7JGNoZWNrYm94ID0gIjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYWN0Ym94W11cIiBpZD1cImFjdGJveCIuJGkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9CiAgICAgICAgaWYgKGlzX2RpcigkdikpIHskcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZCZkPSIuJHV2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQogICAgICAgIGVsc2UgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1pbmZvJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1lZGl0JmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkNoYW5nZVwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZG93bmxvYWRcIiBhbHQ9XCJEb3dubG9hZFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQogICAgICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskdGFiWyJoZWFkIl1bXSA9ICRyb3c7fQogICAgICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskdGFiWyJsaW5rcyJdW10gPSAkcm93O30KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQogICAgICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskdGFiWyJmaWxlcyJdW10gPSAkcm93O30KICAgICAgICAkaSsrOwogICAgICB9CiAgICB9CiAgICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImZvbGRlcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOwogICAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+WytdICI7CiAgICBpZiAoIWVtcHR5KCRmeF9pbmZvaGVhZCkpIHsgZWNobyAkZnhfaW5mb2hlYWQ7IH0KICAgIGVsc2UgeyBlY2hvICJEaXJlY3RvcnkgTGlzdCAoIi5jb3VudCgkdGFiWyJmaWxlcyJdKS4iIGZpbGVzIGFuZCAiLihjb3VudCgkdGFiWyJmb2xkZXJzIl0pK2NvdW50KCR0YWJbImxpbmtzIl0pKS4iIGZvbGRlcnMpIjsgfQogICAgZWNobyAiIFsrXTwvZGl2PlxuIjsKICAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUIG5hbWU9XCJsc19mb3JtXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1cIiIuJGRzcGFjdC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iLiRkLiI+Ii4KICAgICAgICAgIjx0YWJsZSBjbGFzcz1leHBsb3Jlcj4iOwogICAgZm9yZWFjaCgkdGFibGUgYXMgJHJvdykgewogICAgICBlY2hvICI8dHI+IjsKICAgICAgZm9yZWFjaCgkcm93IGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9CiAgICAgIGVjaG8gIjwvdHI+XHJcbiI7CiAgICB9CiAgICBlY2hvICI8L3RhYmxlPiIuCiAgICAgICAgICI8c2NyaXB0PiIuCiAgICAgICAgICJmdW5jdGlvbiBsc19zZXRjaGVja2JveGFsbChzdGF0dXMpIHsiLgogICAgICAgICAiIHZhciBpZCA9IDE7IHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7Ii4KICAgICAgICAgIiB3aGlsZSAoaWQgPD0gbnVtKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gc3RhdHVzOyBpZCsrOyB9Ii4KICAgICAgICAgIn0iLgogICAgICAgICAiZnVuY3Rpb24gbHNfcmV2ZXJzZV9hbGwoKSB7Ii4KICAgICAgICAgIiB2YXIgaWQgPSAxOyB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOyIuCiAgICAgICAgICIgd2hpbGUgKGlkIDw9IG51bSkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZDsgaWQrKzsgfSIuCiAgICAgICAgICJ9Ii4KICAgICAgICAgIjwvc2NyaXB0PiIuCiAgICAgICAgICI8ZGl2IGFsaWduPVwicmlnaHRcIj4iLgogICAgICAgICAiPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwodHJ1ZSk7XCIgdmFsdWU9XCJTZWxlY3QgYWxsXCI+Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoZmFsc2UpO1wiIHZhbHVlPVwiVW5zZWxlY3QgYWxsXCI+Ii4KICAgICAgICAgIjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj4iOwogICAgaWYgKGNvdW50KGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSkpID4gMCBhbmQgKCR1c2Vmc2J1ZmYpKSB7CiAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWFjdGFyY2J1ZmYgdmFsdWU9XCJQYWNrIGJ1ZmZlciB0byBhcmNoaXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFjdGFyY2J1ZmZfcGF0aFwiIHZhbHVlPVwiZnhfYXJjaGl2ZV8iLnN1YnN0cihtZDUocmFuZCgxLDEwMDApLnJhbmQoMSwxMDAwKSksMCw1KS4iLnRhci5nelwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0ZW1wdHlidWZmXCIgdmFsdWU9XCJFbXB0eSBidWZmZXJcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOwogICAgfQogICAgZWNobyAiPHNlbGVjdCBuYW1lPXg+PG9wdGlvbiB2YWx1ZT1cIiIuJHguIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9ZGVsZXRlIi4oJGRzcGFjdCA9PSAiZGVsZXRlIj8iIHNlbGVjdGVkIjoiIikuIj5EZWxldGU8L29wdGlvbj4iOwogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jaG1vZCIuKCRkc3BhY3QgPT0gImNobW9kIj8iIHNlbGVjdGVkIjoiIikuIj5DaGFuZ2UtbW9kZTwvb3B0aW9uPiI7CiAgICBpZiAoJHVzZWZzYnVmZikgewogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWN1dCIuKCRkc3BhY3QgPT0gImN1dCI/IiBzZWxlY3RlZCI6IiIpLiI+Q3V0PC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jb3B5Ii4oJGRzcGFjdCA9PSAiY29weSI/IiBzZWxlY3RlZCI6IiIpLiI+Q29weTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9dW5zZWxlY3QiLigkZHNwYWN0ID09ICJ1bnNlbGVjdCI/IiBzZWxlY3RlZCI6IiIpLiI+VW5zZWxlY3Q8L29wdGlvbj4iOwogICAgfQogICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiQ29uZmlybVwiPjwvZGl2PiI7CiAgICBlY2hvICI8L2Zvcm0+IjsKICB9Cn0KaWYgKCR4ID09ICJ0b29scyIpIAp7Cgp9CmlmICgkeCA9PSAicGhwZnN5cyIpIHsKICBlY2hvICI8ZGl2IGFsaWduPWxlZnQ+IjsKICAkZnNmdW5jID0gJHBocGZzeXNmdW5jOwogIGlmICgkZnNmdW5jPT0iY29weSIpIHsKICAgIGlmICghY29weSgkYXJnMSwgJGFyZzIpKSB7IGVjaG8gIkZhaWxlZCB0byBjb3B5ICRhcmcxLi4uXG4iO30KICAgIGVsc2UgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgY29waWVkIHRvICRhcmcyXG4iOyB9CiAgfQogIGVsc2VpZiAoJGZzZnVuYz09InJlbmFtZSIpIHsKICAgIGlmICghcmVuYW1lKCRhcmcxLCAkYXJnMikpIHsgZWNobyAiRmFpbGVkIHRvIHJlbmFtZS9tb3ZlICRhcmcxIVxuIjt9CiAgICBlbHNlIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHJlbmFtZWQvbW92ZWQgdG8gJGFyZzJcbiI7IH0KICB9CiAgZWxzZWlmICgkZnNmdW5jPT0iY2htb2QiKSB7CiAgICBpZiAoIWNobW9kKCRhcmcxLCRhcmcyKSkgeyBlY2hvICJGYWlsZWQgdG8gY2htb2QgJGFyZzEhXG4iO30KICAgIGVsc2UgeyBlY2hvICI8Yj5QZXJtIGZvciAkYXJnMSBjaGFuZ2VkIHRvICRhcmcyITwvYj5cbiI7IH0KICB9CiAgZWxzZWlmICgkZnNmdW5jPT0icmVhZCIpIHsKICAgICRoYXNpbCA9IEBmaWxlX2dldF9jb250ZW50cygkYXJnMSk7CiAgICBlY2hvICI8Yj5GaWxlbmFtZTo8L2I+ICRhcmcxPGJyPiI7CiAgICBlY2hvICI8dGV4dGFyZWEgY29scz0xNTAgcm93cz0yMD4iOwogICAgZWNobyAkaGFzaWw7CiAgICBlY2hvICI8L3RleHRhcmVhPlxuIjsKICB9CiAgZWxzZWlmICgkZnNmdW5jPT0id3JpdGUiKSB7CiAgICBpZihAZmlsZV9wdXRfY29udGVudHMoJGQuJGFyZzEsJGFyZzIpKSB7CiAgICAgIGVjaG8gIjxiPlNhdmVkITwvYj4gIi4kZC4kYXJnMTsKICAgIH0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IHdyaXRlIHRvICRhcmcxITwvZGl2PiI7IH0KICB9CiAgZWxzZWlmICgkZnNmdW5jPT0iZG93bmxvYWRiaW4iKSB7CiAgICAkaGFuZGxlID0gZm9wZW4oJGFyZzEsICJyYiIpOwogICAgJGNvbnRlbnRzID0gJyc7CiAgICB3aGlsZSAoIWZlb2YoJGhhbmRsZSkpIHsKICAgICAgJGNvbnRlbnRzIC49IGZyZWFkKCRoYW5kbGUsIDgxOTIpOwogICAgfQogICAgJHIgPSBAZm9wZW4oJGQuJGFyZzIsJ3cnKTsKICAgIGlmIChmd3JpdGUoJHIsJGNvbnRlbnRzKSkgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgc2F2ZWQgdG8gIi4kZC4kYXJnMi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kYXJnMikpLiIpIjsgfQogICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0KICAgIGZjbG9zZSgkcik7CiAgICBmY2xvc2UoJGhhbmRsZSk7CiAgfQogIGVsc2VpZiAoJGZzZnVuYz09ImRvd25sb2FkIikgewogICAgJHRleHQgPSBpbXBsb2RlKCcnLCBmaWxlKCRhcmcxKSk7CiAgICBpZiAoJHRleHQpIHsKICAgICAgJHIgPSBAZm9wZW4oJGQuJGFyZzIsJ3cnKTsKICAgICAgaWYgKGZ3cml0ZSgkciwkdGV4dCkpIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHNhdmVkIHRvICIuJGQuJGFyZzIuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGFyZzIpKS4iKSI7IH0KICAgICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q291bGRuJ3Qgd3JpdGUgdG8gIi4kZC4kYXJnMi4iITwvZGl2PiI7IH0KICAgICAgZmNsb3NlKCRyKTsKICAgIH0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IGRvd25sb2FkIGZyb20gJGFyZzEhPC9kaXY+Ijt9CiAgfQogIGVsc2VpZiAoJGZzZnVuYz09J21rZGlyJykgewogICAgJHRoZWRpciA9ICRkLiRhcmcxOwogICAgaWYgKCR0aGVkaXIgIT0gJGQpIHsKICAgICAgaWYgKGZpbGVfZXhpc3RzKCR0aGVkaXIpKSB7IGVjaG8gIjxiPkFscmVhZHkgZXhpc3RzOjwvYj4gIi5odG1sc3BlY2lhbGNoYXJzKCR0aGVkaXIpOyB9CiAgICAgIGVsc2VpZiAoIW1rZGlyKCR0aGVkaXIpKSB7IGVjaG8gIjxiPkFjY2VzcyBkZW5pZWQ6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7IH0KICAgICAgZWxzZSB7IGVjaG8gIjxiPkRpciBjcmVhdGVkOjwvYj4gIi5odG1sc3BlY2lhbGNoYXJzKCR0aGVkaXIpO30KICAgIH0KICAgIGVsc2UgeyBlY2hvICJDb3VsZG4ndCBjcmVhdGUgY3VycmVudCBkaXI6PGI+ICR0aGVkaXI8L2I+IjsgfQogIH0KICBlbHNlaWYgKCRmc2Z1bmM9PSdmd3JpdGFibGVkaXInKSB7CiAgICBmdW5jdGlvbiByZWN1cnNlX2RpcigkZGlyLCRtYXhfZGlyKSB7CiAgICAgIGdsb2JhbCAkZGlyX2NvdW50OwogICAgICAkZGlyX2NvdW50Kys7CiAgICAgIGlmKCAkY2RpciA9IEBkaXIoJGRpcikgKSB7CiAgICAgICAgd2hpbGUoICRlbnRyeSA9ICRjZGlyLT4gcmVhZCgpICkgewogICAgICAgICAgaWYoICRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicgKSB7CiAgICAgICAgICAgIGlmKGlzX2RpcigkZGlyLiRlbnRyeSkgJiYgaXNfd3JpdGFibGUoJGRpci4kZW50cnkpICkgewogICAgICAgICAgICAgaWYgKCRkaXJfY291bnQgPiAkbWF4X2RpcikgeyByZXR1cm47IH0KICAgICAgICAgICAgICBlY2hvICJbIi4kZGlyX2NvdW50LiJdICIuJGRpci4kZW50cnkuIlxuIjsKICAgICAgICAgICAgICByZWN1cnNlX2RpcigkZGlyLiRlbnRyeS5ESVJFQ1RPUllfU0VQQVJBVE9SLCRtYXhfZGlyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkY2Rpci0+Y2xvc2UoKTsKICAgICAgfQogICAgfQogICAgaWYgKCEkYXJnMSkgeyAkYXJnMSA9ICRkOyB9CiAgICBpZiAoISRhcmcyKSB7ICRhcmcyID0gMTA7IH0KICAgIGVjaG8gIjxiPldyaXRhYmxlIGRpcmVjdG9yaWVzIChNYXg6ICRhcmcyKSBpbjo8L2I+ICRhcmcxPGJyPiI7CiAgICBlY2hvICI8cHJlPiI7CiAgICByZWN1cnNlX2RpcigkYXJnMSwkYXJnMik7CiAgICBlY2hvICI8L3ByZT4iOwogICAgJHRvdGFsID0gJGRpcl9jb3VudCAtIDE7CiAgICBlY2hvICI8Yj5Gb3VuZHM6PC9iPiAiLiR0b3RhbC4iIG9mIDxiPk1heDwvYj4gJGFyZzIiOwogIH0KICBlbHNlIHsKICAgIGlmICghJGFyZzEpIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5ObyBvcGVyYXRpb24hIFBsZWFzZSBmaWxsIHBhcmFtZXRlciBbQV0hPC9kaXY+XG4iOyB9CiAgICBlbHNlIHsKICAgICAgaWYgKCRoYXNpbCA9ICRmc2Z1bmMoJGFyZzEpKSB7CiAgICAgICAgZWNobyAiPGI+UmVzdWx0IG9mICRmc2Z1bmMgJGFyZzE6PC9iPjxicj4iOwogICAgICAgIGlmICghaXNfYXJyYXkoJGhhc2lsKSkgeyBlY2hvICIkaGFzaWxcbiI7IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGVjaG8gIjxwcmU+IjsKICAgICAgICAgIGZvcmVhY2ggKCRoYXNpbCBhcyAkdikgeyBlY2hvICR2LiJcbiI7IH0KICAgICAgICAgIGVjaG8gIjwvcHJlPiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPiRmc2Z1bmMgJGFyZzEgZmFpbGVkITwvZGl2PlxuIjsgfQogICAgfQogIH0KICBlY2hvICI8L2Rpdj5cbiI7Cn0KCmlmICgkeCA9PSAicHJvY2Vzc2VzIikgewogIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPi46IFByb2Nlc3NlcyA6LjwvZGl2PiI7CiAgaWYgKCEkd2luKSB7ICRoYW5kbGVyID0gInBzIC1hdXgiLigkZ3JlcD8iIHwgZ3JlcCAnIi5hZGRzbGFzaGVzKCRncmVwKS4iJyI6IiIpOyB9CiAgZWxzZSB7ICRoYW5kbGVyID0gInRhc2tsaXN0IjsgfQogICRyZXQgPSBteXNoZWxsZXhlYygkaGFuZGxlcik7CiAgaWYgKCEkcmV0KSB7IGVjaG8gIkNhbid0IGV4ZWN1dGUgXCIiLiRoYW5kbGVyLiJcIiEiOyB9CiAgZWxzZSB7CiAgICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQogICAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkcHJvY2Vzc2VzX3NvcnQpOwogICAgaWYgKCFpc19udW1lcmljKCRwYXJzZXNvcnRbMF0pKSB7JHBhcnNlc29ydFswXSA9IDA7fQogICAgJGsgPSAkcGFyc2Vzb3J0WzBdOwogICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7CiAgICAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfZGVzY1wiIGJvcmRlcj1cIjBcIj48L2E+IjsKICAgIH0KICAgIGVsc2UgewogICAgICAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2FzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iOwogICAgfQogICAgJHJldCA9IGh0bWxzcGVjaWFsY2hhcnMoJHJldCk7CiAgICBpZiAoISR3aW4pIHsKICAgICAgaWYgKCRwaWQpIHsKICAgICAgICBpZiAoaXNfbnVsbCgkc2lnKSkgeyRzaWcgPSA5O30KICAgICAgICBlY2hvICJTZW5kaW5nIHNpZ25hbCAiLiRzaWcuIiB0byAjIi4kcGlkLiIuLi4gIjsKICAgICAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9CiAgICAgICAgZWxzZSB7ZWNobyAiRVJST1IuIjt9CiAgICAgIH0KICAgICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9CiAgICAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICAgICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOwogICAgICB1bnNldCgkc3RhY2tbMF0pOwogICAgICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykgewogICAgICAgIGlmICgkaSAhPSAkaykgeyRoZWFkWyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii4kaGVhZFskaV0uIjwvYj48L2E+Ijt9CiAgICAgIH0KICAgICAgJHByY3MgPSBhcnJheSgpOwogICAgICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpIHsKICAgICAgICBpZiAoIWVtcHR5KCRsaW5lKSkgewogICAgICAgICAgZWNobyAiPHRyPiI7CiAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsKICAgICAgICAgICRsaW5lWzEwXSA9IGpvaW4oIiAiLGFycmF5X3NsaWNlKCRsaW5lLDEwKSk7CiAgICAgICAgICAkbGluZSA9IGFycmF5X3NsaWNlKCRsaW5lLDAsMTEpOwogICAgICAgICAgaWYgKCRsaW5lWzBdID09IGdldF9jdXJyZW50X3VzZXIoKSkgeyRsaW5lWzBdID0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxpbmVbMF0uIjwvZm9udD4iO30KICAgICAgICAgICRsaW5lW10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9cHJvY2Vzc2VzJmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7CiAgICAgICAgICAkcHJjc1tdID0gJGxpbmU7CiAgICAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9CiAgICAgIHdoaWxlIChlcmVnKCI9IiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiPSIsIiIsJHJldCk7fQogICAgICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7CiAgICAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICAgICAgdW5zZXQoJHN0YWNrWzBdLCRzdGFja1syXSk7CiAgICAgICRzdGFjayA9IGFycmF5X3ZhbHVlcygkc3RhY2spOwogICAgICAkc3RhY2tbMF09c3RyX3JlcGxhY2UoIkltYWdlIE5hbWUiLCJJbWFnZU5hbWUiLCRzdGFja1swXSk7CiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiU2Vzc2lvbiBOYW1lIiwiU2Vzc2lvbk5hbWUiLCRzdGFja1swXSk7CiAgICAgICRzdGFja1swXT1zdHJfcmVwbGFjZSgiTWVtIFVzYWdlIiwiTWVtb3J5VXNhZ2UiLCRzdGFja1swXSk7CiAgICAgICRoZWFkID0gZXhwbG9kZSgiICIsJHN0YWNrWzBdKTsKICAgICAgJHN0YWNrID0gYXJyYXlfc2xpY2UoJHN0YWNrLDEpOwogICAgICAkaGVhZCA9IGFycmF5X3ZhbHVlcygkaGVhZCk7CiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImFcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2Rlc2NcIiBib3JkZXI9XCIwXCI+PC9hPiI7IH0KICAgICAgZWxzZSB7ICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfYXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOyB9CiAgICAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQogICAgICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykgewogICAgICAgIGlmICgkaSAhPSAkaykgeyAkaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIudHJpbSgkaGVhZFskaV0pLiI8L2I+PC9hPiI7IH0KICAgICAgfQogICAgICAkcHJjcyA9IGFycmF5KCk7CiAgICAgIHVuc2V0KCRzdGFja1swXSk7CiAgICAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkgewogICAgICAgIGlmICghZW1wdHkoJGxpbmUpKSB7CiAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsKICAgICAgICAgICRsaW5lWzRdID0gc3RyX3JlcGxhY2UoIi4iLCIiLCRsaW5lWzRdKTsKICAgICAgICAgICRsaW5lWzRdID0gaW50dmFsKCRsaW5lWzRdKSAqIDEwMjQ7CiAgICAgICAgICB1bnNldCgkbGluZVs1XSk7CiAgICAgICAgICAkcHJjc1tdID0gJGxpbmU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAkaGVhZFska10gPSAiPGI+Ii4kaGVhZFska10uIjwvYj4iLiR5OwogICAgJHYgPSAkcHJvY2Vzc2VzX3NvcnRbMF07CiAgICB1c29ydCgkcHJjcywidGFic29ydCIpOwogICAgaWYgKCRwcm9jZXNzZXNfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30KICAgICR0YWIgPSBhcnJheSgpOwogICAgJHRhYltdID0gJGhlYWQ7CiAgICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7CiAgICBlY2hvICI8dGFibGUgY2xhc3M9ZXhwbG9yZXI+IjsKICAgIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspIHsKICAgICAgZWNobyAiPHRyPiI7CiAgICAgIGZvcmVhY2goJGsgYXMgJGo9PiR2KSB7CiAgICAgICAgaWYgKCR3aW4gYW5kICRpID4gMCBhbmQgJGogPT0gNCkgeyR2ID0gdmlld19zaXplKCR2KTt9CiAgICAgICAgZWNobyAiPHRkPiIuJHYuIjwvdGQ+IjsKICAgICAgfQogICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgICBlY2hvICI8L3RhYmxlPiI7CiAgfQp9CgppZiAoJHggPT0gImYiKSB7CiAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PiI7CiAgaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKSB7CiAgICBpZiAoZmlsZV9leGlzdHMoJGQuJGYpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48L2NlbnRlcj4iO30KICAgIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9ZWRpdCZkPSIudXJsZW5jb2RlKCRkKS4iJmM9MVwiPjx1PkNyZWF0ZTwvdT48L2E+PC9jZW50ZXI+Ijt9CiAgfQogIGVsc2UgewogICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOwogICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsKICAgICRjID0gY291bnQoJGV4dCktMTsKICAgICRleHQgPSAkZXh0WyRjXTsKICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICAgJHJmdCA9ICIiOwogICAgZm9yZWFjaCgkZnR5cGVzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fX0KICAgIGlmIChlcmVnaSgic2Vzc18oLiopIiwkZikpIHskcmZ0ID0gInBocHNlc3MiO30KICAgIGlmIChlbXB0eSgkZnQpKSB7JGZ0ID0gJHJmdDt9CiAgICAkYXJyID0gYXJyYXkoCiAgICAgICAgYXJyYXkoImluZm8iLCJpbmZvIiksCiAgICAgICAgYXJyYXkoImh0bWwiLCJodG1sIiksCiAgICAgICAgYXJyYXkoInR4dCIsInR4dCIpLAogICAgICAgIGFycmF5KCJDb2RlIiwiY29kZSIpLAogICAgICAgIGFycmF5KCJTZXNzaW9uIiwicGhwc2VzcyIpLAogICAgICAgIGFycmF5KCJleGUiLCJleGUiKSwKICAgICAgICBhcnJheSgiU0RCIiwic2RiIiksCiAgICAgICAgYXJyYXkoImltZyIsImltZyIpLAogICAgICAgIGFycmF5KCJpbmkiLCJpbmkiKSwKICAgICAgICBhcnJheSgiZG93bmxvYWQiLCJkb3dubG9hZCIpLAogICAgICAgIGFycmF5KCJub3RlcGFkIiwibm90ZXBhZCIpLAogICAgICAgIGFycmF5KCJlZGl0IiwiZWRpdCIpCiAgICApOwogICAgZWNobyAiPGI+Vmlld2luZyBmaWxlOiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsKICAgIGZvcmVhY2goJGFyciBhcyAkdCkgewogICAgICBpZiAoJHRbMV0gPT0gJHJmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Zm9udCBjb2xvcj1ncmVlbj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQogICAgICBlbHNlaWYgKCR0WzFdID09ICRmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30KICAgICAgZWxzZSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9CiAgICAgIGVjaG8gIiAoPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7CiAgICB9CiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICBpZiAoJGZ0ID09ICJpbmZvIikgewogICAgICBlY2hvICI8Yj5JbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj48dHI+PHRkPjxiPlBhdGg8L2I+PC90ZD48dGQ+ICIuJGQuJGYuIjwvdGQ+PC90cj48dHI+PHRkPjxiPlNpemU8L2I+PC90ZD48dGQ+ICIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1ENTwvYj48L3RkPjx0ZD4gIi5tZDVfZmlsZSgkZC4kZikuIjwvdGQ+PC90cj4iOwogICAgICBpZiAoISR3aW4pIHsKICAgICAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOwogICAgICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkZC4kZikpOwogICAgICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZC4kZikpOwogICAgICAgIGVjaG8gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZC4kZikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkLiRmKSk7CiAgICAgIH0KICAgICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4ieD1jaG1vZCZmPSIudXJsZW5jb2RlKCRmKS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4iLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiI8L2E+PC90ZD48L3RyPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjwvdGFibGU+IjsKICAgICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7CiAgICAgIGlmICgkZmkpIHsKICAgICAgICBpZiAoJGZ1bGxoZXhkdW1wKSB7ZWNobyAiPGI+RlVMTCBIRVhEVU1QPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksZmlsZXNpemUoJGQuJGYpKTt9CiAgICAgICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQogICAgICAgICRuID0gMDsKICAgICAgICAkYTAgPSAiMDAwMDAwMDA8YnI+IjsKICAgICAgICAkYTEgPSAiIjsKICAgICAgICAkYTIgPSAiIjsKICAgICAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkc3RyKTsgJGkrKykgewogICAgICAgICAgJGExIC49IHNwcmludGYoIgJYIixvcmQoJHN0clskaV0pKS4iICI7CiAgICAgICAgICBzd2l0Y2ggKG9yZCgkc3RyWyRpXSkpIHsKICAgICAgICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDMyOgogICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICBjYXNlIDEzOiAkYTIgLj0gIiZuYnNwOyI7IGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OiAkYTIgLj0gaHRtbHNwZWNpYWxjaGFycygkc3RyWyRpXSk7CiAgICAgICAgICB9CiAgICAgICAgICAkbisrOwogICAgICAgICAgaWYgKCRuID09ICRoZXhkdW1wX3Jvd3MpIHsKICAgICAgICAgICAgJG4gPSAwOwogICAgICAgICAgICBpZiAoJGkrMSA8IHN0cmxlbigkc3RyKSkgeyRhMCAuPSBzcHJpbnRmKCIIWCIsJGkrMSkuIjxicj4iO30KICAgICAgICAgICAgJGExIC49ICI8YnI+IjsKICAgICAgICAgICAgJGEyIC49ICI8YnI+IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPHRhYmxlIGJvcmRlcj0xIGJnY29sb3I9IzY2NjY2Nj4iLgogICAgICAgICAgICAgIjx0cj48dGQgYmdjb2xvcj0jNjY2NjY2PiIuJGEwLiI8L3RkPiIuCiAgICAgICAgICAgICAiPHRkIGJnY29sb3I9IzAwMDAwMD4iLiRhMS4iPC90ZD4iLgogICAgICAgICAgICAgIjx0ZCBiZ2NvbG9yPSMwMDAwMDA+Ii4kYTIuIjwvdGQ+Ii4KICAgICAgICAgICAgICI8L3RyPjwvdGFibGU+PGJyPiI7CiAgICAgIH0KICAgICAgCiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZnVsbGhleGR1bXA9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RnVsbDwvYT5dIFs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZkPSIudXJsZW5jb2RlKCRkKS4iXCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPgogICAgICAgIDxub2JyPls8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RW5jb2RlPC9hPl0mbmJzcDs8L25vYnI+CiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTMmZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTQmZD0iLnVybGVuY29kZSgkZCkuIlwiPkRlY29kZTwvYT5dJm5ic3A7PC9ub2JyPgogICAgICAgIDxQPiI7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJodG1sIikgewogICBpZiAoJHdoaXRlKSB7QG9iX2NsZWFuKCk7fQogICBlY2hvICRyOwogICBpZiAoJHdoaXRlKSB7Tm9UZWFNc2V4aXQoKTt9CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJ0eHQiKSB7ZWNobyAiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3ByZT4iO30KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsVFJVRSkpOyBlY2hvICI8L3ByZT4iO30KICBlbHNlaWYgKCRmdCA9PSAicGhwc2VzcyIpIHsKICAgZWNobyAiPHByZT4iOwogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsKICAgZWNobyAkdlswXS4iPGJyPiI7CiAgIHZhcl9kdW1wKHVuc2VyaWFsaXplKCR2WzFdKSk7CiAgIGVjaG8gIjwvcHJlPiI7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJleGUiKSB7CiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7CiAgICRjID0gY291bnQoJGV4dCktMTsKICAgJGV4dCA9ICRleHRbJGNdOwogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsKICAgJHJmdCA9ICIiOwogICBmb3JlYWNoKCRleGVmdHlwZXMgYXMgJGs9PiR2KQogICB7CiAgICBpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO30KICAgfQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7CiAgIGVjaG8gIjxiPkV4ZWN1dGUgZmlsZTo8L2I+PGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jbWQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gInNkYiIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJHIpKSk7IGVjaG8gIjwvcHJlPiI7fQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikgewogICAgaWYgKGVyZWcoInBocCIuIkJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKSB7CiAgICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOwogICAgICBpZiAoY291bnQoJGFyciA9PSAxOCkpIHsKICAgICAgICBpbmNsdWRlKCRkLiRmKTsKICAgICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsKICAgICAgICBpZiAoJGRibXMgPT0gIm15c3FsNCIpIHskZGJtcyA9ICJteXNxbCI7fQogICAgICAgIGlmICgkZGJtcyA9PSAibXlzcWwiKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9c3FsJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYmhvc3QpLiImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkZGJ1c2VyKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYnBhc3N3ZCkuIiZzcWxfcG9ydD0zMzA2JnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRibmFtZSkuIlwiPjxiPjx1PkNvbm5lY3QgdG8gREI8L3U+PC9iPjwvYT48YnI+PGJyPiI7fQogICAgICAgIGVsc2Uge2VjaG8gIkJ1dCwgeW91IGNhbid0IGNvbm5lY3QgdG8gZm9ydW0gc3FsLWJhc2UsIGJlY2F1c2UgZGItc29mdHdhcmU9XCIiLiRkYm1zLiJcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIuJHNoX25hbWUuIi4gUGxlYXNlLCByZXBvcnQgdXMgZm9yIGZpeC4iO30KICAgICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsKICAgICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsKICAgICAgICBmb3JlYWNoICgkY2ZndmFycyBhcyAkaz0+JHYpIHtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGspLiI9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic8YnI+Ijt9CiAgICAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgICAgfQogICAgfQogICAgZWNobyAiPGRpdiBzdHlsZT1cImJvcmRlciA6IDBweCBzb2xpZCAjRkZGRkZGOyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMWVtOyBtYXJnaW4tcmlnaHQ6IDFlbTsgbWFyZ2luLWxlZnQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogIi4kaGlnaGxpZ2h0X2JhY2tncm91bmQgLiI7XCI+IjsKICAgIGlmICghZW1wdHkoJHdoaXRlKSkge0BvYl9jbGVhbigpO30KICAgIGhpZ2hsaWdodF9maWxlKCRkLiRmKTsKICAgIGlmICghZW1wdHkoJHdoaXRlKSkge05vVGVhTXNleGl0KCk7fQogICAgZWNobyAiPC9kaXY+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikgewogICAgQG9iX2NsZWFuKCk7CiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7CiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iXCI7Iik7CiAgICBlY2hvICRyOwogICAgZXhpdDsKICB9CiAgZWxzZWlmICgkZnQgPT0gIm5vdGVwYWQiKSB7CiAgICBAb2JfY2xlYW4oKTsKICAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7CiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iLnR4dFwiOyIpOwogICAgZWNobygkcik7CiAgICBleGl0OwogIH0KICBlbHNlaWYgKCRmdCA9PSAiaW1nIikgewogICAgJGluZiA9IGdldGltYWdlc2l6ZSgkZC4kZik7CiAgICBpZiAoISR3aGl0ZSkgewogICAgICBpZiAoZW1wdHkoJGltZ3NpemUpKSB7JGltZ3NpemUgPSA1MDt9CiAgICAgICR3aWR0aCA9ICRpbmZbMF0vMTAwKiRpbWdzaXplOwogICAgICAkaGVpZ2h0ID0gJGluZlsxXS8xMDAqJGltZ3NpemU7CiAgICAgIGVjaG8gIjxjZW50ZXI+PGI+U2l6ZTo8L2I+Jm5ic3A7IjsKICAgICAgJHNpemVzID0gYXJyYXkoIjEwMCIpOwogICAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpIHsKICAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJmQ9Ii51cmxlbmNvZGUoJGQpLiImaW1nc2l6ZT0iLiR2LiJcIj4iOwogICAgICAgIGlmICgkaW1nc2l6ZSAhPSAkdiApIHtlY2hvICR2O30KICAgICAgICBlbHNlIHtlY2hvICI8dT4iLiR2LiI8L3U+Ijt9CiAgICAgICAgZWNobyAiPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgIH0KICAgICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOwogICAgfQogICAgZWxzZSB7CiAgICAgIEBvYl9jbGVhbigpOwogICAgICAkZXh0ID0gZXhwbG9kZSgkZiwiLiIpOwogICAgICAkZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTsKICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsKICAgICAgcmVhZGZpbGUoJGQuJGYpOwogICAgICBleGl0OwogICAgfQogIH0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpIHsKICAgaWYgKCFlbXB0eSgkc3VibWl0KSkKICAgewogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsKICAgIGlmICghJGZwKSB7ZWNobyAiPGI+Q2FuJ3Qgd3JpdGUgdG8gZmlsZSE8L2I+Ijt9CiAgICBlbHNlCiAgICB7CiAgICAgZWNobyAiPGI+U2F2ZWQhPC9iPiI7CiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsKICAgICBmY2xvc2UoJGZwKTsKICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7dG91Y2goJGQuJGYsJHN0YXRbOV0sJHN0YXRbOF0pO30KICAgICAkciA9ICRlZGl0X3RleHQ7CiAgICB9CiAgIH0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOwogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQogICBpZiAoJHJvd3MgPiAzMCkgeyRyb3dzID0gMzA7fQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLmFkZHNsYXNoZXMoJHN1cmwuIng9bHMmZD0iLnN1YnN0cigkZCwwLC0xKSkuIic7XCIgdmFsdWU9XCJCYWNrXCI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZWRpdF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3RleHRhcmVhPjwvZm9ybT4iOwogIH0KICBlbHNlaWYgKCFlbXB0eSgkZnQpKSB7ZWNobyAiPGNlbnRlcj48Yj5NYW51YWxseSBzZWxlY3RlZCB0eXBlIGlzIGluY29ycmVjdC4gSWYgeW91IHRoaW5rLCBpdCBpcyBtaXN0YWtlLCBwbGVhc2Ugc2VuZCB1cyB1cmwgYW5kIGR1bXAgb2YgXCRHTE9CQUxTLjwvYj48L2NlbnRlcj4iO30KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPlVua25vd24gZXh0ZW5zaW9uICgiLiRleHQuIiksIHBsZWFzZSwgc2VsZWN0IHR5cGUgbWFudWFsbHkuPC9iPjwvY2VudGVyPiI7fQp9CmVjaG8gIjwvZGl2PlxuIjsKfQp9CmVsc2UgewpAb2JfY2xlYW4oKTsKJGltYWdlcyA9IGFycmF5KAoiYXJyb3dfbHRyIj0+CiJSMGxHT0RsaEpnQVdBSUFCQVAvLy93QUFBQ0g1QkFIb0F3RUFMQUFBQUFBbUFCWUFBQUl2akkrcHkrMFBGNGkwZ1Z2enVWeFhEbm9RU0lyVVpHWm9lcktmMjhLalBOUE9ha3U1UmZaK3VRc0toOFJpb2dBQU93PT0iLAoiYmFjayI9PgoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLzkzZDNjREF3SWFHaGdRRUJQLy8vd0FBQUNINUJBRUFBQVlBTEFBQUFBQVVBQlFBQUFNOCIuCiJhTHJjL2pES1NXV3BqVnlzU05pWUo0Q1VPQkpvcWpuaUlMend1ekx0WU4vM3pCU0VyZjZrQlcrZ0tSaVBSZ2hQaCtFRkswbU9VRXF0Ii4KIldnMEpBRHM9IiwKImJ1ZmZlciI9PgoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLy9qNCtOM2QzY3pNekxLeXNvYUdodi8vL3lINUJBRUFBQWNBTEFBQUFBQVVBQlFBQUFObyIuCiJlTHJjcmliRzkweTRGMUFtdTUrTmhZMmt4bDJDTUt3clFSU0d1VmpwNExtd0RBV3FpQUdGWENoZyt4aG5SQitwdExPaGFpMWNyRW1EIi4KIkRsd3Y0Y0VDNDZtaTJZZ0pRS2F4c0VHREZubkd3V0RURXpqOWpyUFJkYmh1RzhDci8ySU5aSU9FaFhzYkR3a0FPdz09IiwKImNoYW5nZSI9PgoiUjBsR09EbGhGQUFVQU1RZkFMM2hqN25YK3BxbzFlankvZjdZQWNUYis4dmgrNkZ0SDU2V1p0dnIvUkFRRVplY3g5TGwvUFg2L3YzKyIuCiIvM2VIdDZxODhlSHUvWmtmSDN5VnlJdVF0KzcyL2tPbTk5Zm8vUDhBWm01N3JrR1M0SGV6NnBpbDlvZXAzR1ptWnYvLy95SDVCQUVBIi4KIkFCOEFMQUFBQUFBVUFCUUFBQVdmNENlT1pHbWU2Tm10TE91bFgrYzRUVk5WUTdlOXFGemZnNEhGb25rZEpBNVM1NGNiUkFvRnlFT0MiLgoid1NpVXRtWWtrcmd3T0FlQTV6cnFhTGxkQmlOTUlKZUQyNjZYWVRnUURtNVJ4OG1kRytvQWJTWWRhSDRHYTNjOEpCTUphWFFHQlFnQSIuCiJDSGtqRTRhUWtRMEFsU0lUYW4rWkFRcWtpaVFQajFBRkFhTUtFS1lqRDM5UXJLd0tBYThuR1FLOEFndS9DeFRDc0NNZXhzZkl4akRMIi4KInpNc2hBRHM9IiwKImRlbGV0ZSI9PgoiUjBsR09EbGhGQUFVQU9aWkFQejgvTlBGeU5nSExzMFlPdlB6OC9iMjlzYWNwTlhWMWZYMTljd1hPZkR3OEtlbnAvbjUrZXRnZXVucCIuCiI2ZGNHTE1NcFJ1cnE2cEtTa3R2YjIrL3Y3KzF3aDNSMGRQblAxN2lBaXB4eWVsOWZYN2RqY3NjU005M2QzWkdSa2VFc1RldmQ0TEN3Ii4KInNHUmtaR3BPVStJZlErRVFOb2g2ZmRJY1BlSGg0WVdGaGJKUVl2THk4dWkreG01dWJzeGNjT3g4a2NNNFV0WTlXZUFkUVltSmlmV3YiLgoidkh4OGZNbkp5Y00zVWYzdjhyUnVlOThPTmJPenM5WUZLNVNVbEtZb1ArVGs1TjBvU3VmbjU3WkdXc1FyUjlrSUw1Q1FrT1BqNDJWbCIuCiJaZUFQTnVkQVg5c0tNUHY3KzE1UVU1dWJtMzkvZjhlNXU0eGlhdHJhMnViS3o4UER3K3BmZWU5L2xNSzB0ODFyZmQ4QUtmLy8vd0FBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINSIuCiJCQUVBQUZrQUxBQUFBQUFVQUJRQUFBZXNnRm1DZzRTRmhvZUloaVVmSUltSU1sZ1FCNDZHTEFsWVFrYUZWVmhTQUlaTFQ1Y2JFWUk0Ii4KIlNUbzVNeE9maFF3QkExZ1lDaGNrUUJrMU93aUlBTEFDTGtneEppbFRCSTY5UkZoREZoNEhESlJaVkZnUFBGQlIwRmtOV0RkTUhBOEciLgoiQlpUYU1DSVNWZ01DNElrVldDY2FQU2k5Nk9xR05GaEtJMDRkZ3IwUVdGY0tETDNBNHVPSWpWWlpBQnhRSVdEQkxrSUVRclJvUXNIUSIuCiJqd1ZGSEJnaUVHUUZJZ1Fhc1lrY1NiSlFJQUE3IiwKImRvd25sb2FkIj0+CiJSMGxHT0RsaEZBQVVBTE1JQUFEL0FBQ0FBSUFBQU1EQXdIOS9mLzhBQVAvLy93QUFBUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVUFCUUFBQVJPRU1sSnE3MDRVeUdPdmtMaGZWVTRrcE9KU3B4NW5GOVlpQ3RMZjBTdUg3cHUiLgoiRVlPZ2NCZ2t3QWlHcEhLWnpCMkp4QURBU1FGQ2lkUUpzTWZkR3FzREpuT1FsWFRQMzhwcnpXYlgzcWdJQURzPSIsCiJmb3J3YXJkIj0+CiJSMGxHT0RsaEZBQVVBUElBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4KImFMcmMvakRLMlFwOXhWNVdpTjVHNTBGWmFSTEQ2SWhFNjZMcHQzUkRiZDlDUUZTRTRQKytRVzdIZTdVS1BoMElxVncybDBSUVNFcXQiLgoiV3FzSkFEcz0iLAoiaG9tZSI9PgoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNekxLeXNvYUdobVptWmdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSK01NazVUVFdJNmlweU1vTzNjVVdSZ2VKb0NDYUxvS08wbXEwWnhqTlNCRFdTIi4KImtycUFzTGZKN1lRQmw0dGlSQ1lGU3BQTWRSUkNvUU9pTDRpOENnWmdrMDlXZldMQllaSEI2VVdqQ2VxdXdFREh1T0VWSzNRdGdOL2oiLgoiVndNckJEWnZnRitDaEhhR2VZaUNCUVlIQ0g4VkJKYVdkQWVTbDVZaVc1K2dvQklSQURzPSIsCiJtb2RlIj0+CiJSMGxHT0RsaEhRQVVBTE1BQUFBQUFQLy8vNkNncE4zZDNjek16SWFHaG1abVpsOWZYLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBZEFCUUFBQVNCRU1sSnE3MDQ2MW02LytBSFpNVWduR2lxbmlOV0hIQXN6M0Y3RlVHdTczeE8iLgoiMkJaY3dHRG9FWGsvVXE0SUNBQ2VRNmZ6bVhUbG5zMGRkbGU5OWI3Y0Z2WXBFUjU1WjEwWHkxbEt0OHdwb0lzQUNyZGFxQnBZRVlLLyIuCiJkSDFMUldpRWUwcFJUWEJ2Vkh3VWQzbzZlRDZPSEFTWG1KbWFtSlVTWTUrZ254dWpwQklSQURzPSIsCiJzZWFyY2giPT4KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpNREF3TEt5c29hR2huZDNkMlptWmw5ZlgwMU5UU2twS1FRRUJQLy8iLgoiL3dBQUFDSDVCQUVBQUE0QUxBQUFBQUFVQUJRQUFBU24wTWw1cWowejV4cjYrSlpHZVVacEhJcVJOT0lSZklZaXkrYTZ2Y09wSE9hcCIuCiJzNUlLUWNjejhYZ0s0RUdnUXFXTXZrclNzY3lsaG9hRlZtdVpMZ1VEQW5aeEVCTU9EU25ya2hpU0NaNENHclVXTUErTExEeHVTSHNEIi4KIkFrTjRDM3NmQlgxMFZIYUJKNFFmQTRlSVU0cGlqUWNGbUNWb05rRmxnZ2NNUlNjTlNVQ2RKeWhvRGFzTlo1TVREVnNYQndsdmlSbXIiLgoiQ2JxN0M2c0lycWF3ckt3VHY2OGl5QTZyRGhFQU93PT0iLAoic2V0dXAiPT4KIlIwbEdPRGxoRkFBVUFNUUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TURBd0xLeXNwYVdsb2FHaG5kM2QyWm1abDlmWDAxTlRVSkMiLgoiUWh3Y0hQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQSIuCiJBQkFBTEFBQUFBQVVBQlFBQUFXVklDU0tpa0tXYURtdVNoQ1VianpNd0VvR2hWdnNmSEVFTlJZT2dlZ2xqa2VnMFBGNEtCSUZSTUlCIi4KInFDYUNKNGVJR1FWb0lWV3NUZlFvWE1mb1VmbU1acmdaMkdORFBHSUk3Z0pETFlFcndHMXZnVzhDQ1F0emdIaUpBbmFGaHl0MmR3UUUiLgoiT3djTVpvWjBrSktVbFplT2RRS2JQZ2VkalptaG5BY0pscWFJcVVlc21JaWtwRWl4bnlKaHVsVU1oZzI0YVNPNll5RUFPdz09IiwKInNtYWxsX2RpciI9PgoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzV5Y0FNN09ZLy8vblAvL3p2L09uUGYzOS8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQVRBQkFBQUFSUkVNbEpxNzA0NnlwNkJ4c2lIRVZCRUFLWUNVUHJEcDdIbFhSZEVvTXFDZWJwIi4KIi80WWNoZmZ6R1FoSDRZUllQQjJET2xIUGlLd3FkMVBxOHlyVlZnM1FZZUg1UllLNXJKZmFGVVVBM3ZCNGZCSUJBRHM9IiwKInNtYWxsX3VuayI9PgoiUjBsR09EbGhFQUFRQUhjQUFDSDVCQUVBQUpVQUxBQUFBQUFRQUJBQWh3QUFBSWVwM0JFOW1sbGljM0I1aVZwamRNdmgvTUxjK3kxVSIuCiJwOVBtL0dWdWZjN2ovTXpWLzlYbS9FT205OWJuL05qcC9hN1ErdFRtL0xIUytlWHcvdDNyL05ucC9kam8vTnJxL2ZqNy85dnEvTmZvIi4KIi9NYmUrOHJoL01uZys3alcrcnZZK3I3Wis3WFI5ZERrL05Iay9OTGwvTFRVK3JuWCs4emkvTGJWKytmeC9lNzIvdkgzL3ZMNC91MzEiLgoiL2UzMS91RHUvZHpyL09yei9lSHUvZlg2L3ZINC92Ly8vL3YrLzNlejZ2ZjcvL1Q1L2tHUzRQdjkvN1hWK3JIVCtyL2IrcnphK3ZQNCIuCiIvdXowL3Vyei91NzEvdXZ6L2RUbi9NL2svTjNzL2R2ci9jamcrOFBkKzhIYytzZmYrOFRlKy9EMi9yWEk4ckhGOGJyTTg3Zko4bm1QIi4KIndyM044Ni9EOEt2QjhGOW5lRUZvdEVCbnRFTnB0RU5wdFN4VXB4MUlvRGxmclRSY3JaZWV5WmFjeHBtaHpJdVJ0cFdaeEl1T3VLcXoiLgoiOVpPV3dYNklzM1dJdTVpbTA3cko5SjJ0MlplazBtNTdycHFvMW5LQ3RVVnJ0WWlyM3ZmNi80NnY0WXV1NFdadmZyN1A2c1BTNnNEUSIuCiI2NlhCNmNqWjhhL0s3OS9zL2Ribi9lenovY3pkOW1OMGpLVEI2YWkvNzZXOTduaVh6MkdDd1Y2QXdVZHN0WHlWeUdTRHdubVl6NGlvIi4KIjI0T2kxYTNCNDVTeTRhZTk0NENjejRTajFuMkdsZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBam5BQ3RWQ2tDdzRKeEpBUVFxRkJqQXhvME1OR3FzQUJRQWg2Q0ZBM25rME1IaVJSRVZEaHpzb0xRd0FKMGdUNFRvZWNTSEFZTXoiLgoiYVFnb0ROQ0NTQjRFQW5JbUNpU0JqVXlHTG9iZ1hCVHBrQUE1STZwZ21Ta0R6NWN1TVN6OHlXbEF5b0NaRkdiNFNRS2hBU01CWEpwTSIuCiJ1U3JRRVF3a0dqWWtRQ1RBeTZBbFVNaFdrbFFCdzRNRWhnU0E2WFBnUnhTNWlpNDBLTEZnaTRCR1RFS0FzQ0tYaWhFU0N6cnNnU1FDIi4KInlJa1VWK1NxT1lMQ0E0Y3NBdXA4Nk9HRGtOdzRCcFE0T2FCRmdCMFRFeUlVS3FEd1RSczRhOXlNQ1NPbURCb3ladTRzSktDZ3dJRGoiLgoieUFzb2tCa1FBRHM9IiwKIm11bHRpcGFnZSI9PiJSMGxHT0RsaENnQU1BSkVEQVAvLy8vLzNtUUFBQUFBQUFDSDVCQUVBQUFNQUxBQUFBQUFLQUF3QUFBSWozSVIiLgoicEpoQ09Ebm92aWRBb3ZCZE16emtpeGxYZGxJMm9acEpXRXNTeXdMelJVQUFBT3c9PSIsCiJzb3J0X2FzYyI9PgoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYSIuCiJTTHJjUGNFOUdLVWFRbFE1c041UGxvRkxKMzVPb0s2cTVTWUFPdz09IiwKInNvcnRfZGVzYyI9PgoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYiIuCiJTTHJjT2pCQ0I0VVZJVGd5THQ1Y2gybWdTSlpEQmk3cDZoSUpBRHM9IiwKInNxbF9idXR0b25fZHJvcCI9PgoiUjBsR09EbGhDUUFMQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLgoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLgoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLgoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLgoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQXNBIi4KIkFBZzRBUDhKUkVGUTREK0NDQk9pNE1hd0lUZUZDZy9pUWhFUHhjU0JsRkNvUTVGeDRNU0t2MUJnUkdHTW8waUpGQzJlaEhqU29NdC8iLgoiQVFFQU93PT0iLAoic3FsX2J1dHRvbl9lbXB0eSI9PgoiUjBsR09EbGhDUUFLQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLgoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLgoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLgoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLgoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQW9BIi4KIkFBZ2pBUDhKUkVGUTREK0NDQk9pTU1oUW9jS0RFQmN1akVpUm9zU0JGakZlbk9od1lVQUFPdz09IiwKInNxbF9idXR0b25faW5zZXJ0Ij0+CiJSMGxHT0RsaERRQU1BUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLgoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLgoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLgoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBTkFBd0EiLgoiQUFnekFGRUlIRWl3b01HRENCSDZXMGd0b1VCLy8xQkVOT2lQMnNLRUN6TmVOSWlxWTBkL0ZCZit5MGpSNDhlUUdVYzZKQmdRQURzPSIsCiJ1cCI9PgoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpMS3lzb2FHaGsxTlRmLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxNzM0bnMxUG5rY2dqZ1h3aGNOUXJJVmhtRm9uenh3UWpuaWUyN2pnIi4KIis0UWd5M1hnQlg0SW9IRGxNaFJ2Z2dGaUdpU3dXczVYeURmdFdwbEVKKzlIUUN5eDJjMVlFRFJmd3dmeHRvcDRwNTNQd0xLT2p2dlYiLgoiSVh0ZGd3Z2RQR2RZZm5nMUlWZUphVElBa3BPVWxaWWZIeEVBT3c9PSIsCiJ3cml0ZSI9PgoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLzkzZDNjek16TEt5c29hR2htWm1abDlmWHdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxeXpGYWxxRVFKdUdFUVNDbldnNkZvZ3BrSEFNRjRIQUpzV2g3L3plIi4KIkVRWVFMVUFzR2dNMFd3dDNiQ0pmUVNGeDEweXlCbEpuOFJmRU1nTTlYKzNxSFdxNWlFRDV5Q3NNQ2wxMTFrbkRwdVhmWWxzK0lLNjEiLgoiTFhkK1dXRUhMVWQvVG9KRlpRT09qNUNSamlDQmxaYVhJQkVBT3c9PSIsCiJleHRfYXNwIj0+CiJSMGxHT0RkaEVBQVFBTE1BQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdNREF3SUNBZ1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4KIi8vLy8veXdBQUFBQUVBQVFBQUFFU3ZESVNhc0YyTjZETU5BUzhCeGZsMVVpT1pZZTlhVXdncERUcTZxUC9JWDBPejdBWFUvMWVSZ0kiLgoiRDZIUGh6alNlTFlkWWFic0RDV01ad2hnM1dXdEtLNFFyTUhvaENBUytoQUJBRHM9IiwKImV4dF9tcDMiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0lDQUFQLy9BQUFBQUFBQUFBTlUiLgoiYUdyUzdpdUtRR3NZSXFwcDZRaVpSRFFXWUFJTFFRU0EyZzJvNFFvQVNIR3d2QmJBTjNHWDFxWEErcjFhQlFIUlpITUVEU1lDejNmYyIuCiJJR3RHVDh3QVV3bHR6d1dOV1JWM0xEbnhZTTF1YjZHbmVEd0JBRHM9IiwKImV4dF9hdmkiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd1A4QUFBQUFBQUFBQUFBQUFBTk0iLgoiV0ZyUzdpdUtRR3NZSXFwcDZRaVoxRkZBQ1lpakI0Uk1xamJZMDFEd1dnNDRnQXNyUDVRRmsyNEh1T2hPREp3U1UvSWhCWVRjanhlNCIuCiJQWVhDeWcrVjJpNDRYZVJtU2ZZcXNHaEFBZ0E3IiwKImV4dF9jZ2kiPT4KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFd0FMQUFBQUFBUUFCQUFoZ0FBQUp0cUNIZDNkN2lOR2ErSE11N2VyOUdpQzYrSU9PdTkiLgoiRGtKQVBxeUZRcWwvTi9EbGhzeXlmZTY3QWYvU0ZQLzhrZi85bEQ5RVR2L1BDdi9jUS8vZU52L1hJZi9aS1AvUkR2L2JMZi9jTWFoNiIuCiJMUFBZUnZ6Z1Irdmd4N3lWTXYvbFV2L21Udi9mT2YvTUF2L21jZi9OQS8vcWlmL01BUC9URmYveHA3dVpWZi9XSVAvT0JxdC9Idi9TIi4KIkV2L2hQKzdPT1AvV0h2L3diSE5mUDRWelY3dVBGdi9wVi8vclhmL3ljZi96ZHYvMGVVTkpXRU5LV3N5a0lrOVJXTXl0UC8vNGlFcFEiLgoiWHYvOXFmYnB0UC91WjkzR2lOcTZYV3BSSi8vaVF2N3dzcXVFUXYvalJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0V5Q2cwd0JoSWVIQVlxSWpBRXdob3lFQVFRWEJKQ1JoUU11QTVlU2lvb0dJd2FmaTRVTSIuCiJCYWdORkJNY0RSNEZRd3dCQWdFR1NCQkVGU3d4TmhBeUdnNldBa3dDQkFndkZpVWlPQkVnTlVjN3c0SUNORDhQS0NGQU9pMEpQTktEIi4KIkFrVW5HVGtSTndNUzM0TUJKQmdkUmtKTENEN3FnZ0VQS3hzSktpWVRCd2VKa2poUWtrN0FoeFE5RnFnTE1HQkdrRzhLRkNnOEpLQWkiLgoiUll0TUFnRUFPdz09IiwKImV4dF9jbWQiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBY0FMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0FBQWdJQ0FBUC8vQUFBQUFBTkkiLgoiZUxyY0p6REtDWWU5K0FvZ0J2bGcrRzJkU0FRQWlwSUQ1WEpESU0rMHpOSkZrZEwzREJnNkhteFdNRUFBaFZsUEJoZ1lkclloRFFDTiIuCiJkbXJZQU1uMW9ucS9ZS3BqdkVnQUFEcz0iLAoiZXh0X2NwcCI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQyIuCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFSWtWWVdxVDRGSUNvSjV2N2M2czNjcXJBcndpbkUvMzQ5RmlOb0Z3NDRydGxxaE9MNFJhIi4KIkVxN1lyTERFN2E0U0FEcz0iLAoiZXh0X2luaSI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdJQ0FnSUNBQVAvL0FBQUFBQUFBQUFOTCIuCiJhQXJCM2lvYU5rSzlNTmJIczZsQktJb0NvSTFvVUo0TjREQ3FxWUJwdU02aHE4UDNod29FZ1UzbWF3RUxCRWFQRmlBVUFNZ1l5M1ZNIi4KIlNuRWpnUFZhckhFSGdyQjQzSnZzenNRRUFEcz0iLAoiZXh0X2RpeiI9PgoiUjBsR09EbGhFQUFRQUhjQUFDSDVCQUVBQUpVQUxBQUFBQUFRQUJBQWh3QUFBUC8vLzE1cGhjZmI2TkxzLzdQYy8rUDAvM0orbDlicyIuCiIvNTJudXFqSzUvbi8vL2ovLy83Ly8vci8vMHRybHNQbi84bm4vOG5aNXRybTc5bnUvOC9xLzlYdC85encvOTN3LytqMS85SHIvK0R2Ii4KIi9kN3YvNzNIME1qVTM5enUvOWJyLzhuZTh0WG4rSzYvejhYai9MalY3ZERwLzZLNHk4YmwvNU80Mk96Mi83SFc5SnU5MnUvOS84VDMiLgoiLytMLy8rNysvK3Y2LysvNi85SDQvK1g2LytYbDVQei8vKy90N2ZYMDh2RC8vKzMvLy9QLy8vSC8vL1A3LzhucS84ZnAvOFRsOTh6ciIuCiIvKy96OXZUNCsrbjEvYi9rL2RueS85SHYvK3Y0LzkvMC85ZncvOC91Lzh2dC8rLzA5eFV2WGhRdFc0S1RzMlYxa3c0b1ZUZFlwRFpYIi4KInBWeHFobHhxaUV4a2ltS0J0TVBMMkZ0dmoyT1Y2YU91d3BxbHVseU4zY25PMXdBQVhRQUFaU004akU1WGpnQUFid0FBZVVSQllnQUEiLgoiZEFBQWR6WkVhRTl3d0RaWXBtVnZpUjQ5akcxMmtDaEZtZ1l1ajYrMXhlTG43TnpqNnBtMjBvZXF5cFMyMTJTSnJhQ3l4Wld5ejdQVyIuCiI5Yy9vLzg3bi84RFg3TUhZN3EvSzVMZlg5YXJCMXNybC8yK2Z6cTI5MFUxNHE3ZkN6NmUyeVh1bTMwRmpsQ2xIYzRlWHI2YkkrYlRLIi4KIjRyZlcrTlhlNk9ieS81U3Z6V1NIciticjhXdUtyUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBamdBQ3NKckRSSFNJQ0RRN0lNWERnSng4RXZadUljYlBCb29ad2JCd09NQWZNbVl3QkNBMnNFY05CakpDTVlBVExJT0xpb2tvY20iLgoiQzFRc2tBQ2xDeGNHQmo3RXNOSG9RQWNpU0NDMW1OQW1qSmdHR0VCUW9CSGlnS0VOQmpoY0NCQUl6Um9HRmt3UU1OS255Z2dSU1JBZyIuCiIyQkhwREJVZWV3UlYwUERIQ3A0QlNnancwWkdIekpRY0VWRDRJRUhKellrQmZvNHNlWUdsREJ3Z1RDQUFZdkZFNEtFQkpZSTRVclBGIi4KIkN5SUlLK3dvWWpNd1FRSTZDb3I4bUtFbnhSMG5BaFlLakhKRlFZRUNrcVNrU2ExNjRJTTZMaExScnIzd3dhQkN1M2tQRktDbGRrQUEiLgoiT3c9PSIsCiJleHRfZG9jIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0FBQS80Q0FnQUFBQUFBQUFBQUFBQU5SIi4KIldFcmNyckNRUUNzbFFBMndPd2RYa0lGV05WQkErbm1lNEFaQ3VvbG5Sd2t3RjlRZ0VPUEFGRzIxQStaNHNRSE85NHIxZUpSVEpWbXEiLgoiTUlPcnJQU1dXWlJjemE2a2FvbEJDT0IwV294UnVkMEpBRHM9IiwKImV4dF9leGUiPT4KIlIwbEdPRGxoRXdBT0FLSUFBQUFBQVAvLy93QUF2Y2JHeG9TRWhQLy8vd0FBQUFBQUFDSDVCQUVBQUFVQUxBQUFBQUFUQUE0QUFBTTciLgoiV0xUY1RpV1NRYXV0QkVRMWhQK2dsMjFUS0FRQWlvN1M4THhhRzh4MFBiT2NyUWY0dE51OXdhOFdITktLUmw0c2wreTlZQnVBZEVxdCIuCiJ4aElBT3c9PSIsCiJleHRfaCI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQiIuCiJXTFBjOVhDQVNTY1o4TWxLQ2NBUlJ3VmtFQUtDSUJLbU5xVnJxN3dwYk1tYmJiT25yZ0k4RitxM3c5R09RT01RR1p5Sk9zcG5Na0tvIi4KIldxL05rbmJiU2dBQU93PT0iLAoiZXh0X2hwcCI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFORiIuCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFQUdDSUFLRXFhRnFwYlpubWs0Mi9kNDN5cm9LbUxBRGxQQmlzNkx3S05BRmo3amZhV1ZSIi4KIlVxVWFnbmJMZFphK1lGY0NBRHM9IiwKImV4dF9odGFjY2VzcyI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUDhBQVA4QS93QUFnSUFBZ1AvL0FBQUFBQUFBQUFNNiIuCiJXRVhXL2s2UkFHc2ptRm9ZZ05CYkV3akRCMjVkR1p6VkNLZ3NSOExoU25wclBRNDA2cGFmbWtEd1V1bUl2SkJvUkFBQWxFdURFd3BKIi4KIkFBQTciLAoiZXh0X2h0bWwiPT4KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy8ydHJuTTNQL0ZCVmhyUE85bDZJdG95dDB5aGdrK1h5L1dHcDRzWGwvaTZaNG1mZC9ITnoiLgoiYy8vLy95SDVCQUVBQUE4QUxBQUFBQUFUQUJBQUFBU1Q4TWwzcXExbTZubUMvNEdoYkZvWEpFTzFDQU5EU29jaUdrYkFDSGkyMFUzUCIuCiJLSUZHSWpBUU9EU2lCV081TkF4UlJtVGdnRGdrbU03RTZpaXBIWllLQlZOUVNCU2lrdWtTd1c0anltY3VwWUZnSUJxTC9NSzhLQkRrIi4KIkJreDJCWFdEZlg4VEREYUZEQTBLQkFkOWZuSUtIWFlJQkpnSEJRT0hjZytWQ2lrVkE1d0xwWWdiQkt1ckRxeXNueE1PczdTMXN4SVIiLgoiQURzPSIsCiJleHRfanBnIj0+CiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWtBTEFBQUFBQVFBQkFBZ3dBQUFQLy8vOERBd0lDQWdJQ0FBUDhBQUFEL0FJQUFBQUNBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJjY01oSms3MGo2SzNGdUZiR2JVTHdKY1VoamdIZ0FrVXFFZ0pORUVBZ3hFY2kiLgoiQ2k4QUxzQUxhWENHSks1bzFBR1NCc0lBY0FCZ2pnQ0V3QU1FWHAwQkJNTGwvQTZ4NVdadFBmUTJnNiswajhWeCs3YjQvTlpxZ2Z0ZCIuCiJGeEVBT3c9PSIsCiJleHRfanMiPT4KIlIwbEdPRGRoRUFBUUFDSUFBQ3dBQUFBQUVBQVFBSUwvLy84QUFBQ0FnSURBd01ELy93Q0FnQUFBQUFBQUFBQURVQ2k2M0NFZ3hpYkgiLgoiazBBUXNHMjAwQVFVSkJnQW9NaWhqNWRtSXhuTUp4dHFxMWRkRTBFV09oc0cxNm05TW9vQWlTV0VtVGl1QzRUdzJCQjBMOEZnSUFocyIuCiJhMDBBallZQmJjL285SGpObmlVQUFEcz0iLAoiZXh0X2xuayI9PgoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUZBQUxBQUFBQUFRQUJBQWhnQUFBQUJpQUdQTE1tWE1NMHkvSmxmRkxGUzZLMXJHTFdqTyIuCiJOU211RlRXekdrQzVJRzNUT28vMVhFN0FKeDJvRDVYN1lvVHFVWXJ3VjMvbFRIVGFRWG5mUm1ER01ZWHJVaktRSHdBTUFHZk5SSHppIi4KIlV3dzVDQUFxQURPWkdrYXNMWExZUWdoSUJCTjNEVkcyTlduUFJuRFdSd0JPQUI1d0ZRQkJBQUErQUZHM05BazVCU0dIRVVxd01BQmsiLgoiQUFBZ0FBQXdBQUJmQURlMEd4ZUxDeFpjREVLNklVdXhLRmpGTEUzQUoySEhNUktpQ1FXQ0FnQm1BQnB0RGcrSENCWmVEQXFGQldERyIuCiJNeW1VRlFwV0JqMmZKaGR2RFFoT0JDNlhGM2ZkUjBPNklSMk9Ed0FaQUhQWlFDU1JFZ0FTQURhWEh3QUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZVpnRkJRUEFHRmhvY0Fnb0k3T2c4SkNnc0VCUUlXUFFDSmdrQ09rSktVUDVlWVVENlBrWk01Ii4KIk5LQ0tVRE15TlRnM0FnZzJTNWVxVUVwSkRnY0RDQXhNVDA2aGdrMjZ2QXdVRlVoRHRZcEN1d1pCeUJNUlJNeUNSd01HUmtVZzB4SWYiLgoiMWxBZUJpRUFHUmdYRWcwdDRTd3JvQ1lsRFJBbjRTbXBLQ29RSkMvaHFWQXVOR3pnOEU5UktCRWpZQlMwSlNoR2g0VU1vWUFTQmlVUSIuCiJBRHM9IiwKImV4dF9sb2ciPT4KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFNREF3SUNBZ0lDQUFBQUFnQUFBLy8vL0FBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUlFFS0V3SzZVeUJ6QzQ3NWdFQWx0SmtsTFJBV3piQ2xSaHJLNEx5NXlnNy93TiIuCiJ6TFVhTEdCUUJWMkVnRkxWNHhFT1NTV3Q5Z1FRQnBScHF4b1ZOYVBLa0ZiNUVoL0xtVUd6RjVxRTMrRU1JZ0lBT3c9PSIsCiJleHRfcGhwIj0+CiJSMGxHT0RsaEVBQVFBSUFCQUFBQUFQLy8veXdBQUFBQUVBQVFBQUFDSmtRZW9NdWExdEJ4cUxIMzdIVTZhcnhaWUxkSVpNbWQwT3FwYUdleVlwcUpsUkcvcmx3QUFEcz0iLAoiZXh0X3BsIj0+CiJSMGxHT0RsaEZBQVVBS0wvQVAvNC84REF3SDkvQVAvNEFMKy92d0FBQUFBQUFBQUFBQ0g1QkFFQUFBRUFMQUFBQUFBVUFCUUFRQU1vIi4KIkdMcmMzZ09BTVlSNE9PdWRyZWVnUmxCV1NKMWxxSzVzNjRMaldGM2NRTWpwSnBEZjYvL0FCQUE3IiwKImV4dF9zd2YiPT4KIlIwbEdPRGxoRkFBVUFNUVJBUCtjblA5U1VzNEFBUCtjQVAvT0FJUUFBUDlqQU01am5NNmNZODZjbktYTzk4YmV4cHdBQVA4eEFQL08iLgoibkFBQUFQLy8vLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQSIuCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4KIkdCZ2FUMmdNUVlnVmpVZlNUM1lvRkdLQlJnQnFQamdZREVGeFhScERHRUlBNHhBUVFOUjFOSG9NRUFBQ0FCRmhJejhyQ25jTUFHZ0MiLgoiTnlzTGtET1RTQ3NKTkRKYW5UVXFMcU0yS2FhbnFCRWhBRHM9IiwKImV4dF90YXIiPT4KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFc0FMQUFBQUFBUUFCQUFoZ0FBQUJsT0FGZ2RBRkFBQUlZQ1V3QThad0E4WjlEWTRKSUMiLgoiV3YvLy93Q0lXQkUyQUFBeVVKaWNxSVNIbDRDQUFQRDQvK0RnOFBYNi81T1hwTDdIMCsvMi9hR21zVEl5TXRUYzVQLy9zZkw1LzhYRiIuCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4KIlV5V2QvMGl0LzF1MS8zTnpBUDk1MFA5OTBtTzUvN3YxNFl6dnpYTHJ3b1hJLzV2Uy83RGsvd0JYb3Y5c3l2Ump3T2hhdFFDSFYxN3AiLgoidW8wR1VRQlduUCsrOExtNUFQK2o1UUJVbEFDS1dnQTRiakpRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0FLQ2c0U0ZTeFlORXc0Z01nU09qNDhERkFjSEVVSVpSRVlvSkRRelBUNC9Bd2NRQ1FrZyIuCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4KIkhVY01yN0d6QnVmbzZBeTg3THUraWkwZkFmUDA5QXZJRVI4Wk5qYzRRU1VtVG9nWXNjQmFBaVZGa0NoWXlCQ0lpd1hrWkQyb1IzRkIiLgoidTR0TEFnRUFPdz09IiwKImV4dF90eHQiPT4KIlIwbEdPRGxoRXdBUUFLSUFBQUFBQVAvLy84Ykd4b1NFaFAvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFUQUJBQUFBTkoiLgoiU0FyRTNsREpGa2E5MXJLcEEvRGdKM0pCYVo2bHNDa1c2cXFrQjRqekY4QlM2NTQ0VzlaQVc0K2cyNlZXeEY5d2Rvd1ptem5sRXVwNyIuCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLAoiZXh0X3dyaSI9PgoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQUlDQWdNREF3SUNBQUFBQWdBQUEvLy8vQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4KImE0U1hUMGM0QkYwclVoRkFFQVFRSTlkbWViUkVXOHlYQzZOeDJRSTdMcllidHBKWk5zeGd6VzZuTGRxNDloSUJBRHM9IiwKImV4dF94bWwiPT4KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLgoiZ0RPWkFETm0vek9aL3pQLy84REF3RFBNL3dBQS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFWazRDQ09wQWlkMEFDc2JOc01xTnF1QWlBMEFKelNkbDhId01CT1VLZ2hFQXBiRVNCVUZRd0FCSUN4Ii4KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLgoiSVFBNyIKKTsKJGltZ2VxdWFscyA9IGFycmF5KAogICJleHRfdGFyIj0+YXJyYXkoImV4dF90YXIiLCJleHRfcjAwIiwiZXh0X2FjZSIsImV4dF9hcmoiLCJleHRfYnoiLCJleHRfYnoyIiwiZXh0X3RieiIsImV4dF90YnoyIiwiZXh0X3RneiIsImV4dF91dSIsImV4dF94eGUiLCJleHRfemlwIiwiZXh0X2NhYiIsImV4dF9neiIsImV4dF9pc28iLCJleHRfbGhhIiwiZXh0X2x6aCIsImV4dF9wYmsiLCJleHRfcmFyIiwiZXh0X3V1ZiIpLAogICJleHRfcGhwIj0+YXJyYXkoImV4dF9waHAiLCJleHRfcGhwMyIsImV4dF9waHA0IiwiZXh0X3BocDUiLCJleHRfcGh0bWwiLCJleHRfc2h0bWwiLCJleHRfaHRtIiksCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksCiAgImV4dF9odG1sIj0+YXJyYXkoImV4dF9odG1sIiwiZXh0X2h0bSIpLAogICJleHRfYXZpIj0+YXJyYXkoImV4dF9hdmkiLCJleHRfbW92IiwiZXh0X212aSIsImV4dF9tcGciLCJleHRfbXBlZyIsImV4dF93bXYiLCJleHRfcm0iKSwKICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLAogICJleHRfaW5pIj0+YXJyYXkoImV4dF9pbmkiLCJleHRfY3NzIiwiZXh0X2luZiIpLAogICJleHRfZG9jIj0+YXJyYXkoImV4dF9kb2MiLCJleHRfZG90IiksCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksCiAgImV4dF9jbWQiPT5hcnJheSgiZXh0X2NtZCIsImV4dF9iYXQiLCJleHRfcGlmIiksCiAgImV4dF93cmkiPT5hcnJheSgiZXh0X3dyaSIsImV4dF9ydGYiKSwKICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLAogICJleHRfbXAzIj0+YXJyYXkoImV4dF9tcDMiLCJleHRfYXUiLCJleHRfbWlkaSIsImV4dF9taWQiKSwKICAiZXh0X2h0YWNjZXNzIj0+YXJyYXkoImV4dF9odGFjY2VzcyIsImV4dF9odHBhc3N3ZCIsImV4dF9odCIsImV4dF9odGEiLCJleHRfc28iKQopOyAgCgppZiAoISRnZXRhbGwpIHsKICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvZ2lmIik7CiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTsKICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOwogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7CiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmRhdGUoInIiLGZpbGVtdGltZShfX0ZJTEVfXykpKTsKICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQogIGlmIChlbXB0eSgkaW1hZ2VzWyRpbWddKSkgeyRpbWcgPSAic21hbGxfdW5rIjt9CiAgaWYgKGluX2FycmF5KCRpbWcsJGV4dF90YXIpKSB7JGltZyA9ICJleHRfdGFyIjt9CiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOwp9CmVsc2UgewogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkYT0+JGIpIHtmb3JlYWNoICgkYiBhcyAkZCkge2lmICgkYSAhPSAkZCkge2lmICghZW1wdHkoJGltYWdlc1skZF0pKSB7ZWNobygiV2FybmluZyEgUmVtb3ZlIFwkaW1hZ2VzWyIuJGQuIl08YnI+Iik7fX19fQogIG5hdHNvcnQoJGltYWdlcyk7CiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOwogIGVjaG8gICI8Y2VudGVyPiI7CiAgZm9yZWFjaCAoJGsgYXMgJHUpIHtlY2hvICR1LiI6PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Ii4kdS4iXCIgYm9yZGVyPVwiMVwiPjxicj4iO30KICBlY2hvICI8L2NlbnRlcj4iOwp9CmV4aXQ7Cn0KCmlmICgkeCA9PSAiU29ycnkgQWRtaW4iKSB7CiAgJGlwID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07CiAgJG1zZyA9ICRfUE9TVFsnYmFja2Njb25ubXNnJ107CiAgJGVtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXTsKICBlY2hvKCI8Y2VudGVyPjxiPlsmIzgyMjQ7XSAuL2JhY2tjb25uZWN0IFsmIzgyMjQ7XTwvYj48L2JyPjwvYnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPkhvc3Q6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWJhY2tjb25uZWN0aXAgc2l6ZT0xNSB2YWx1ZT0kaXA+IFBvcnQ6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1iYWNrY29ubmVjdHBvcnQgc2l6ZT0xNSB2YWx1ZT00NTQ1PiBVc2U6IDxzZWxlY3Qgc2l6ZT0xIG5hbWU9dXNlPjxvcHRpb24gdmFsdWU9UGVybD5QTDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9Q29ubmVjdD48L2Zvcm0+bHUgcnVuIGR1bHUgZGkgY29uc29sZSBhdGF1IHNlcnZlciBrYWxpYW4gPGI+bmMgLWx2cDQ1NDU8L2I+LCBkYW4gbGVib2tlIGlwIHNhbWEgcG9ydG55YSBwYWRhIGtlZHVhIGtvbG9tIGRpIGF0YXMuIDxiPmJhcnUga2FsaWFuIGtsaWsgY29ubmVjdG55YTwvYj4nPGJyPjxicj48L2NlbnRlcj4iKTsKICBlY2hvKCIkbXNnIik7CiAgZWNobygiJGVtc2ciKTsKCn0KCmlmICgkeCA9PSAiY1AiKXsKCWlmICgkX0dFVFsnZ28nXSA9PSAnZ28nKXsgCiAgICBzZXRfdGltZV9saW1pdCgwKTsKCSMjIyMjIyMjIyMjIyMjIyMjIwoJQCRwYXNzd2Q9Zm9wZW4oJy9ldGMvcGFzc3dkJywncicpOwoJaWYgKCEkcGFzc3dkKSB7CgkgICBlY2hvICJbLV0gRXJyb3IgOiBjb3Vkbid0IHJlYWQgL2V0Yy9wYXNzd2QiOwoJICAgZXhpdDsKCX0KCSRwYXRoX3RvX3B1YmxpYz1hcnJheSgpOwoJJHVzZXJzPWFycmF5KCk7CgkkcGF0aHRvY29uZj1hcnJheSgpOwoJJGk9MDsKCQoJd2hpbGUoIWZlb2YoJHBhc3N3ZCkpIHsKCSAgJHN0cj1mZ2V0cygkcGFzc3dkKTsKCSAgaWYgKCRpPjM1KSB7CgkJJHBvcz1zdHJwb3MoJHN0ciwiOiIpOwoJCSR1c2VybmFtZT1zdWJzdHIoJHN0ciwwLCRwb3MpOwoJCSRkaXJ6PSIvaG9tZS8kdXNlcm5hbWUvcHVibGljX2h0bWwvIjsKCQlpZiAoKCR1c2VybmFtZSE9IiIpKSB7CgkJCWlmIChpc19yZWFkYWJsZSgkZGlyeikpIHsKCQkJCWFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7CgkJCQlhcnJheV9wdXNoKCRwYXRoX3RvX3B1YmxpYywkZGlyeik7CgkJCX0KCQl9CgkgIH0KCSAgJGkrKzsKCX0KCSMjIyMjIyMjIyMjIyMjIyMjIyMKCQoJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJZnVuY3Rpb24gcmVhZF9kaXIoJHBhdGgsJHVzZXJuYW1lKSB7CgkJaWYgKCRoYW5kbGUgPSBvcGVuZGlyKCRwYXRoKSkgewoJCQl3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7CgkJCQkgICRmcGF0aD0iJHBhdGgkZmlsZSI7CgkJCQkgIGlmICgoJGZpbGUhPScuJykgYW5kICgkZmlsZSE9Jy4uJykpIHsKCQkJCQkgaWYgKGlzX3JlYWRhYmxlKCRmcGF0aCkpIHsKCQkJCQkJJGRyPSIkZnBhdGgvIjsKCQkJCQkJaWYgKGlzX2RpcigkZHIpKSB7CgkJCQkJCSAgIHJlYWRfZGlyKCRkciwkdXNlcm5hbWUpOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJIGlmICgoJGZpbGU9PSdjb25maWcucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlndXJhdGlvbi5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSd3cC1jb25maWcucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlnLmluYy5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYXRhYmFzZS5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25mLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J3NldHRpbmdzLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J3NldHRpbmcucGhwJykKCQkJCQkJICAgICAgICAgICAgb3IgKCRmaWxlPT0naW5jLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvcm4ucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlncy5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdrb25maWcucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25mLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2tvbmVrc2kucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25maWcucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGIuaW5jLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiX2Nvbm5lY3QucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25uZWN0LnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiLWNvbm5lY3QucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlndXJlLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2dsb2JhbC5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25uZWN0LnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZfZGIucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGF0YWJhc2UuaW5jLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RhdGFiYXNlLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvbm5lY3Rpb24ucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29ubmVjdGlvbnMucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlndXJlLmNsYXNzLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZy5jbGFzcy5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWd1cmF0aW9uLmNsYXNzLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiLmNsYXNzLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2ZpbGVfbWFuYWdlci5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdMb2NhbFNldHRpbmdzLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2ZpbGVtYW5hZ2VyLnBocCcpCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J21hbmFnZXIucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nbWFuYWdlcnMucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29ubmVjdC5pbmMucGhwJykKICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nbGliL2NvbmZpZy5waHAnKQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYmNvbm5lY3QuaW5jLnBocCcpKSAKCQkJCQkJCQkgewoJCQkJCQkJCSRwYXNzPWdldF9wYXNzKCRmcGF0aCk7CgkJCQkJCQkJaWYgKCRwYXNzIT0nJykgewoJCQkJCQkJCSAgIGVjaG8gIlsrXSAkZnBhdGhcbiRwYXNzXG4iOwoJCQkJCQkJCSAgIGZ0cF9jaGVjaygkdXNlcm5hbWUsJHBhc3MpOwoJCQkJCQkJCX0KCQkJCQkJCSB9CgkJCQkJCX0KCQkJCQkgfQoJCQkJICB9CgkJCX0KCQl9Cgl9CgkKCWZ1bmN0aW9uIGdldF9wYXNzKCRsaW5rKSB7CgkJQCRjb25maWc9Zm9wZW4oJGxpbmssJ3InKTsKCQl3aGlsZSghZmVvZigkY29uZmlnKSkgewoJCQkkbGluZT1mZ2V0cygkY29uZmlnKTsKCQkJaWYgKHN0cnN0cigkbGluZSwncGFzcycpIG9yIHN0cnN0cigkbGluZSwncGFzc3dvcmQnKSBvciBzdHJzdHIoJGxpbmUsJ3B3ZCcpIG9yIHN0cnN0cigkbGluZSwna29kZScpIG9yIHN0cnN0cigkbGluZSwnbXlwYXNzd29yZCcpIG9yIHN0cnN0cigkbGluZSwncGFzc3dkJykpIHsKCQkJCWlmIChzdHJycG9zKCRsaW5lLCciJykpCgkJCQkgICAkcGFzcz1zdWJzdHIoJGxpbmUsKHN0cnBvcygkbGluZSwnPScpKzMpLChzdHJycG9zKCRsaW5lLCciJyktKHN0cnBvcygkbGluZSwnPScpKzMpKSk7CgkJCQllbHNlCgkJCQkgICAkcGFzcz1zdWJzdHIoJGxpbmUsKHN0cnBvcygkbGluZSwnPScpKzMpLChzdHJycG9zKCRsaW5lLCInIiktKHN0cnBvcygkbGluZSwnPScpKzMpKSk7CgkJCQlyZXR1cm4gJHBhc3M7CgkJCX0KCQl9Cgl9CgkKCWZ1bmN0aW9uIGZ0cF9jaGVjaygkbG9naW4sJHBhc3MpIHsKCQkgQCRmdHA9ZnRwX2Nvbm5lY3QoJzEyNy4wLjAuMScpOwoJCSBpZiAoJGZ0cCkgewoJCQlAJHJlcz1mdHBfbG9naW4oJGZ0cCwkbG9naW4sJHBhc3MpOwoJCQlpZiAoJHJlcykgewoJCQkgICBlY2hvICdbIFN1a3NlcyBCb3MgXSAnLiRsb2dpbi4nOicuJHBhc3MuIiAgVzAwdFxuIjsKCQkJfQoJCQllbHNlIGZ0cF9xdWl0KCRmdHApOwoJCSB9Cgl9CgkKCWVjaG8gIjxicj48YnI+IjsKCWVjaG8gIjx0ZXh0YXJlYSBuYW1lPSdtYWluX3dpbmRvdycgY29scz0xMDAgcm93cz0yMD4iOwoJCgllY2hvICJbK10gRm91bmQgIi5zaXplb2YoJHVzZXJzKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIjsKCWVjaG8gIlsrXSBGb3VuZCAiLnNpemVvZigkcGF0aF90b19wdWJsaWMpLiIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXNcbiI7CgkKCWVjaG8gIlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcuKiBmaWxlcy4uLlxuXG4iOwoJZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7CgkJCSRwYXRoPSIvaG9tZS8kdXNlci9wdWJsaWNfaHRtbC8iOwoJCQlyZWFkX2RpcigkcGF0aCwkdXNlcik7Cgl9CgkKCWVjaG8gIlxuWytdIFVkYWhcbiI7CgkKCWVjaG8gIjwvdGV4dGFyZWE+PGJyPiI7Cgl9ZWxzZQoJZWNobyAnPGNlbnRlcj5jUGFuZWwgU2Nhbjxicj48YSBocmVmPSInLiRzdXJsLid4PWNQJmdvPWdvIj5PSzwvYT4gfHwgPGEgaHJlZj0iJy4kc3VybC4nIj5DQU5DRUw8L2E+PC9jZW50ZXI+JzsKfQoKaWYgKCR4ID09ICJzbGVlcCIpewogICRtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZyddOwogICRlbXNnID0gJF9QT1NUWydiYWNrY2Nvbm5tc2dlJ107CiAgZWNobygiPGNlbnRlcj48Yj5bJiM4MjI0O10gLi9iYWNrZG9vciBbJiM4MjI0O108L2I+PGJyPjxicj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+CiAgQmluZCBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nYmFja2Nvbm5lY3Rwb3J0JyB2YWx1ZT0nMjEyMTInPgogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3VzZScgdmFsdWU9J3NsZWVwJz4KICA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nSW5zdGFsbCBCYWNrZG9vcic+PC9mb3JtPiIpOwogIGVjaG8oIiRtc2ciKTsKICBlY2hvKCIkZW1zZyIpOwogIGVjaG8oIjwvY2VudGVyPiIpOwp9CgppZiAoJHggPT0gInNrZW4iKXsKc2V0X3RpbWVfbGltaXQoMCk7IAoKKCR4MGIgPSBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAwKSA/ICR4MGIgPSAnb2ZmJzogZGllKCc8Yj5FcnJvcjogU2FmZSBNb2RlIGlzIE9uPC9iPicpOwoKQCR4MGMgPSBmb3BlbignL2V0Yy9wYXNzd2QnLCdyJyk7CgppZiAoISR4MGMpIHsgZGllKCc8Yj4gRXJyb3IgOiBDYW4gTm90IFJlYWQgQ29uZmlnIE9mIFNlcnZlciA8L2I+Jyk7IH0KCi8vICR4MGQgPSBhcnJheSgpOwovLyAkeDBlID0gYXJyYXkoKTsKLy8gJHgwZiA9IGFycmF5KCk7Ci8vICR4MTAgPSAwOwoKd2hpbGUoIWZlb2YoJHgwYykpewogICAgLy8gYmFjYSBiYXJpcy4uLgogICAgLy8gJHgxMSA9IGZnZXRzKCR4MGMpOwogICAgLy8gaWYgKCR4MTAgPCAzNSl7IAogICAgd2hpbGUoJHgxMSA9IGZnZXRzKCR4MGMpKXsKICAgICAgICAKICAgICAgICAkeDEyID0gc3RycG9zKCR4MTEsJzonKTsKCiAgICAgICAgJHgxMyA9IHN1YnN0cigkeDExLDAsJHgxMik7CgoKICAgICAgICAkeDE0ID0gJy9ob21lLycuJHgxMy4nL3B1YmxpY19odG1sJzsKICAgICAgICBpZiAoKCR4MTMgIT0gJycpKXsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChpc19yZWFkYWJsZSgkeDE0KSl7CgogICAgICAgICAgICAgICAgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9MiBjb2xvcj0jYzAwMGZmPlsmIzgyMjQ7XSBvSyBbJiM4MjI0O10gJHgxNDwvZm9udD4iOwogICAgICAgICAgICAgICAgZWNobyAiPGJyLz4iOwogICAgICAgICAgICB9ICAgIAogICAgICAgIH0KICAgIH0KICAgIC8vICR4MTArKzsKIH0KfQoKZWNobyAiPC90ZD48L3RyPjwvdGFibGU+XG4iOwo/Pgo8ZGl2ICBjbGFzcz1iYXJoZWFkZXIyPjxiPlsmIzgyMjQ7XSBDb21tYW5kIFBhbmVsIFsmIzgyMjQ7XTwvYj48L2Rpdj4KPHRhYmxlIGNsYXNzPW1haW5wYW5lbD4KPD9waHAKaWYgKCEkc2FmZW1vZGUpIHsKPz4KPHRyPjx0ZCBhbGlnbj1yaWdodD5Db21tYW5kOjwvdGQ+Cjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT0iY21kIj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiAtIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+CiAgICA8L2Zvcm0+CjwvdGQ+PC90cj4KPHRyPjx0ZCBhbGlnbj1yaWdodD5RdWljayBDb21tYW5kczo8L3RkPgo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImNtZCI+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPgogICAgPHNlbGVjdCBuYW1lPSJjbWQiPgogICAgPD9waHAKICAgIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOwogICAgfQogICAgZm9yZWFjaCAoJGNtZGFsaWFzZXMyIGFzICRhbHMpIHsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOwogICAgfQogICAgPz4KICAgIDwvc2VsZWN0PiAtCiAgICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPgogICAgPC9mb3JtPgo8L3RkPjwvdHI+Cjw/cGhwCn0KPz4KPHRyPjx0ZCBhbGlnbj1yaWdodD5VcGxvYWQ6PC90ZD4KPHRkPjxmb3JtIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJ1cGxvYWQiPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+CiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkZmlsZSI+IC0gPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPiA8P3BocCBlY2hvICR3ZHQ7ID8+CiAgICA8L2Zvcm0+CjwvdGQ+PC90cj4KPHRyPjx0ZCBhbGlnbj1yaWdodD5NYWtlIEZpbGU6PC90ZD4KPHRkPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT0ibWtmaWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtmaWxlIiBzaXplPSI3MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPiA8P3BocCBlY2hvICR3ZHQ7ID8+CiAgICA8L2Zvcm0+PC90ZD48L3RyPgo8dHI+PHRkIGFsaWduPXJpZ2h0PlZpZXcgRmlsZTo8L3RkPgo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJnb2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI3MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IC0gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJWaWV3Ij4KICAgIDwvZm9ybT48L3RkPjwvdHI+CjwvdGFibGU+CjwvYm9keT48L2h0bWw+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement