You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1 lines
227 KiB

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LS1ob3N0KQogICAgICAgICAgICBzaGlmdCAgICAgICAgICAgIAogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLWhvc3Qg5ZCO5b+F6aG75oyH5a6a5Li75py65YiX6KGo77yI5aaCIC0taG9zdCAxMDIsMTAz77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIElGUz0nLCcgcmVhZCAtcmEgaG9zdF9udW1iZXJzIDw8PCAiJDEiCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yICgoaT0wOyBpPCR7I2hvc3RfbnVtYmVyc1tAXX07IGkrKykpOyBkbwogICAgICAgICAgICAgICAgY2FzZSAkaSBpbgogICAgICAgICAgICAgICAgICAgIDApCiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QxPSIke2hvc3RfbnVtYmVyc1swXX0iCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgMSkKICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDI9IiR7aG9zdF9udW1iZXJzWzFdfSIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CgkJICAtLXBvcnQpCiAgICAgICAgICAgIHNoaWZ0ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tcG9ydCDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1wb3J0IDTvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGVzdF9wb3J0PSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAJCQogICAgICAgICopCiAgICAgICAgICAgIGVjaG8gIumUmeivr++8muacquefpeWPguaVsCAkMSIKICAgICAgICAgICAgZWNobyAi55So5rOVOiAkMCBbLS1ub2RlIE5PREVfSURdIFstLWhvc3QgSE9TVDEsSE9TVDIsLi4uXSIKICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIDs7CiAgICBlc2FjCmRvbmUKCiMg5qCh6aqM5L6d6LWW5ZKM6YWN572u5paH5Lu2CmlmICEgY29tbWFuZCAtdiBqcSAmPiAvZGV2L251bGw7IHRoZW4KICAgIGVjaG8gIumUmeivr++8muacquWuieijhSBqcSDlt6XlhbfvvIzor7flhYjmiafooYwgJ3l1bSBpbnN0YWxsIGpxIC15JyDmiJYgJ2FwdCBpbnN0YWxsIGpxIC15JyDlronoo4UiCiAgICBleGl0IDEKZmkKaWYgW1sgLXogIiR0YXJnZXRfc3Rhcl9ub2RlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5b+F6aG76YCa6L+HIC0tbm9kZSDmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgZXhpdCAxCmZpCmlmIFtbICEgLWYgIiRjb25maWdfZmlsZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tiAkY29uZmlnX2ZpbGUg5LiN5a2Y5Zyo77yM6K+35qOA5p+l6Lev5b6EIgogICAgZXhpdCAxCmZpCgpmaXJzdF9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKc2Vjb25kX25vZGU9IiQoKHRhcmdldF9zdGFyX25vZGUgKyA0KSkiCiMg5LuOSlNPTuivu+WPlumFjee9ru+8iGpx6Kej5p6Q77yJCm5vZGUxX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMV9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9pcD0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU1X2JtYz0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9pcD0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU2X2JtYz0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlN19pcD0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU3X2JtYz0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9pcD0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU4X2JtYz0kKGpxIC1yICIuXCIkc2Vjb25kX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpzdGFyX25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgoKZXhwb3J0IFNOT0RFMT0iJG5vZGUxX2JtYywkbm9kZTJfYm1jLCRub2RlM19ibWMsJG5vZGU0X2JtYyIKZXhwb3J0IFNOT0RFMj0iJG5vZGU1X2JtYywkbm9kZTZfYm1jLCRub2RlN19ibWMsJG5vZGU4X2JtYyIKCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q1PSQoZWNobyAiJG5vZGU1X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nj0kKGVjaG8gIiRub2RlNl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDc9JChlY2hvICIkbm9kZTdfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q4PSQoZWNobyAiJG5vZGU4X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKY29udmVydF9ub2RlKCkgewogICAgbG9jYWwgaW5wdXRfbm9kZT0iJDEiCiAgICBsb2NhbCBzdGFydF9ub2RlPSIkMiIKICAgIGxvY2FsIG5vZGVfc3VmZml4CiAgICBsb2NhbCB0YXJnZXRfbm9kZV9udW0KICAgIGxvY2FsIHRhcmdldF9ub2RlICAgIAogICAgbm9kZV9zdWZmaXg9JChlY2hvICIkaW5wdXRfbm9kZSIgfCBzZWQgLW5FICdzL15ub2RlKFswLTldKykkL1wxL3AnKQoKICAgIGlmIFtbIC16ICIkbm9kZV9zdWZmaXgiIF1dOyB0aGVuCiAgICAgICAgZWNobyAi6ZSZ6K+v77ya6L6T5YWlIG5vZGUg5qC85byP5peg5pWI77yM6ZyA5Li6ICdub2RlK+aVsOWtlyfvvIjlpoIgbm9kZTHjgIFub2RlMu+8iSIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBpZiAhIFtbICIkc3RhcnRfbm9kZSIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrotbflp4vlgY/np7vph4/pnIDkuLrmraPmlbTmlbAiID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICB0YXJnZXRfbm9kZV9udW09JCgobm9kZV9zdWZmaXggKyBzdGFydF9ub2RlIC0gMSkpCiAgICB0YXJnZXRfbm9kZT0ibm9kZSR0YXJnZXRfbm9kZV9udW0iCiAgICBlY2hvICIkdGFyZ2V0X25vZGUiCiAgICByZXR1cm4gMAp9Cgpjb2xsZWN0X29uZXRfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSQxCgkgIGxvY2FsIGNyb3NzX2JtYz0kMgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDMKCSAgbG9jYWwgb2NzX3RvcG89JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jIgogICAgbG9jYWwgY3Jvc3NfaG9zdD0iaHR0cHM6Ly8kY3Jvc3NfYm1jIgogICAgbG9jYWwgYWN0aXZlX25vZGU9JChlY2hvICIkYWN0aXZlX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoZWNobyAiJGNyb3NzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBkaXNfdHhfbGlzdD0oIiRjcm9zc19ibWMiKQogICAgSUZTPScsJyByZWFkIC1yYSBzbm9kZTEgPDw8ICRTTk9ERTEKICAgIElGUz0nLCcgcmVhZCAtcmEgc25vZGUyIDw8PCAkU05PREUyCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0gYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCA9PT09PT09PT09PT09PT0iCgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCgkJCWVjaG8gJGNtZAogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCiAgICAKICAgICNkaXNhYmxlIGNyb3NzIG9jcyBhbmQgb3RoZXIgc25vZGUgb2NzICAgIAogICAgZm9yIGluZGV4IGluICIkeyFzbm9kZTFbQF19IjsgZG8gICAgICAgICAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTFbJGluZGV4XX0iID0gIiRhY3RpdmVfYm1jIiBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgbG9jYWwgZGlzX3R4X2xpc3QrPSgke3Nub2RlMlskaW5kZXhdfSkgCiAgICAgICAgZmkgCiAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTFbJGluZGV4XX0iID0gIiRjcm9zc19ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUyWyRpbmRleF19KSAKICAgICAgICBmaSAKICAgICAgICAKICAgIGRvbmUKICAgIAogICAgZm9yIGluZGV4IGluICIkeyFzbm9kZTJbQF19IjsgZG8gCiAgICAgICAgaWYgWyAiJHtzbm9kZTJbJGluZGV4XX0iID0gIiRhY3RpdmVfYm1jIiBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUxWyRpbmRleF19KSAKICAgICAgICAgICAgCiAgICAgICAgZmkgCiAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTJbJGluZGV4XX0iID0gIiRjcm9zc19ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUxWyRpbmRleF19KSAKICAgICAgICBmaSAKICAgIGRvbmUKICAgIAoKICAgIAogICAgZm9yIHR4X2JtYyBpbiAiJHtkaXNfdHhfbGlzdFtAXX0iOyBkbyAgICAgIAogICAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0IGh0dHBzOi8vJHR4X2JtYyAtLXBvcnQgJGFjdGl2ZV9wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgZmkgCiAgICAgICAgICAgICAgc2xlZXAgMwogICAgICAgICAgZG9uZQogICAgICBkb25lCiAgICBkb25lCiAgICAKICAgIAogICAgZWNobyAtZSAiXG5zbGVlcCAxMHMsIHdhaXRpbmcgb2NzIHN0YWJsZS4uLiIKICAgIHNsZWVwIDEwCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCAkYWN0aXZlX2JtYzogcCRhY3RpdmVfcG9ydCBjbWlzIGRhdGEgLS0tLS0iCiAgICBmb3IgKChqPTE7IGo8PTY7IGorKykpOyBkbwogICAgICBsb2NhbCBhY3RpdmVfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtYyAtZSAkYWN0aXZlX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpICAgIAogICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfY21pcyAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9jbWlzIgogICAgICAKICAgICAgaWYgISBlY2hvICIkYWN0aXZlX3BvcnRfY21pcyIgfCBncmVwIC1xICJBc3luY1BvbGwgZmFpbGVkfGxvY2s6IEZhaWxlZCI7IHRoZW4KICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICBicmVhawogICAgICBmaSAKICAgICAgc2xlZXAgMwogICAgZG9uZQogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgJGNyb3NzX2JtYzogcCRhY3RpdmVfcG9ydCBjbWlzIGRhdGEgLS0tLS0iCiAgICBmb3IgKChrPTE7IGs8PTY7IGsrKykpOyBkbwogICAgICBsb2NhbCBjcm9zc19wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRjcm9zc19ibWMgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9jbWlzICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9jbWlzIgogICAgICBpZiAhIGVjaG8gIiRjcm9zc19wb3J0X2NtaXMiIHwgZ3JlcCAtcUUgIkFzeW5jUG9sbCBmYWlsZWR8bG9jazogRmFpbGVkIjsgdGhlbiAgICAgIAogICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgIGJyZWFrCiAgICAgIGZpIAogICAgICBzbGVlcCAzCiAgICBkb25lICAgIAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgcCRhY3RpdmVfcG9ydCBSU1NJIGRhdGEgLS0tLS0iCiAgICBzbGVlcCAyCiAgICBsb2NhbCBjcm9zc19wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgMj4mMSkKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpCiAgICAgICAgICAgIAogICAgIyDosIPor5XovpPlh7rvvIjmjInpnIDlvIDlkK/vvIkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X3Jzc2kgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X3Jzc2kiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfcnNzaSAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9yc3NpIgogICAgICAgIAogICAgZWNobyAtZSAiXG4tLS0tIOiwg+eUqCBQeXRob24g5YiG5p6QICRhY3RpdmVfcG9ydCDmlbDmja4gLS0tLSIKICAgIGV4cG9ydCBMT09QPSIkb2NzX3RvcG8iCiAgICBleHBvcnQgQUNUSVZFX1BPUlQ9IiRhY3RpdmVfbm9kZS1QJGFjdGl2ZV9wb3J0IiAKICAgIGV4cG9ydCBDUk9TU19QT1JUPSIkY3Jvc3Nfbm9kZS1QJGFjdGl2ZV9wb3J0IgogICAgZXhwb3J0IEFDVElWRV9QT1JUX1JTU0k9IiRhY3RpdmVfcG9ydF9yc3NpIiBBQ1RJVkVfUE9SVF9DTUlTPSIkYWN0aXZlX3BvcnRfY21pcyIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVF9SU1NJPSIkY3Jvc3NfcG9ydF9yc3NpIiBDUk9TU19QT1JUX0NNSVM9IiRjcm9zc19wb3J0X2NtaXMiCgogICAgcHl0aG9uMyBjb2xsZWN0X3Rlc3RfZGF0YV9vbm9jX3Jzc2kucHkgCiAgICAKICAgIHVuc2V0IExPT1AgQUNUSVZFX0JNQyBBQ1RJVkVfUE9SVCBDUk9TU19CTUMgQ1JPU1NfUE9SVAogICAgdW5zZXQgQUNUSVZFX1BPUlRfUlNTSSBBQ1RJVkVfUE9SVF9DTUlTIENST1NTX1BPUlRfUlNTSSBDUk9TU19QT1JUX0NNSVMgICAgCgogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZV9ibWMgYW5kICRjcm9zc19ibWM6IHAkYWN0aXZlX3BvcnQg5pWw5o2u5aSE55CG5a6M5oiQID09PT09PT09PT09PT09PVxuIgogICAgc2xlZXAgNgogICAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0gZW5hYmxlIGFjdGl2ZSBwb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAKICAgIGZvciB0eF9ibWMgaW4gIiR7ZGlzX3R4X2xpc3RbQF19IjsgZG8gICAgICAKICAgICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCBodHRwczovLyR0eF9ibWMgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIGZpIAogICAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICAgIGRvbmUKICAgICAgZG9uZQogICAgZG9uZQp9CgpleHBvcnQgLWYgY29sbGVjdF9vbmV0X2Nyb3NzCgpsaW5rX2Nyb3NzdGFsayAoKSB7CiAgbG9jYWwgYWN0aXZlX2JtYz0kMQogIGxvY2FsIGNyb3NzX2JtYz0kMgkKCWxvY2FsIGFjdGl2ZV9wb3J0PSQzCiAgbG9jYWwgYWN0aXZlX25vZGU9JChlY2hvICIkYWN0aXZlX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGVjaG8gIiRjcm9zc19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCSMjIyMjIyMjIyMjb25vYyBjcm9zcyB0YWxrIyMjIyMjIyMjIyMjIwoJZWNobyAiPT09PT09PT09PT09PT10ZXN0IG5vZGU6JGFjdGl2ZV9ub2RlLCRjcm9zc19ub2RlIHBvcnQ6JGFjdGl2ZV9wb3J0IG9ub2MgY3Jvc3MgdGFsaz09PT09PT09PT09IgoJaWYgWyAiJGFjdGl2ZV9wb3J0IiAtZXEgNCBdOyB0aGVuCgkJbG9jYWwgb2NzX3RvcG89Im9ub2M2IgoJZWxpZiBbICIkYWN0aXZlX3BvcnQiIC1lcSA2IF07IHRoZW4KCQlsb2NhbCBvY3NfdG9wbz0ib25vYzciCgllbGlmIFsgIiRhY3RpdmVfcG9ydCIgLWVxIDggXTsgdGhlbgoJCWxvY2FsIG9jc190b3BvPSJvbm9jNiIKCWZpCgoJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCXRpbWVvdXQgMzBzIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkYWN0aXZlX2JtYyAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkY3Jvc3NfYm1jICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCgkKCSMjIyMjIyMjIyMjb25ldCBjcm9zcyB0YWxrIyMjIyMjIyMjIyMjIwoJZWNobyAidGVzdCBub2RlOiRhY3RpdmVfbm9kZSwkY3Jvc3Nfbm9kZSBwb3J0OiRhY3RpdmVfcG9ydCBvbmV0IGNyb3NzIHRhbGsiCQoJbG9jYWwgc25vZGVfYT0kKCgoYWN0aXZlX25vZGUgLSBibWNfaG9zdDEpIC8gNCkpCiAgbG9jYWwgc25vZGVfYz0kKCgoY3Jvc3Nfbm9kZSAtIGJtY19ob3N0MSkgLyA0KSkgCgogIGlmIFsgJHNub2RlX2EgLWVxICRzbm9kZV9jIF07IHRoZW4KCQllY2hvICJ0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YiIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGIiCQoJZWxzZQoJCWVjaG8gIm5vdCB0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YSIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGEiCQkKCWZpCgkKCWlmIFsgIiRhY3RpdmVfcG9ydCIgLW5lIDggXTsgdGhlbgoJCXRpbWVvdXQgMzBzIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCgkJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkYWN0aXZlX2JtYyAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCQl0aW1lb3V0IDEyMHMgYmFzaCAtYyAnY29sbGVjdF9vbmV0X2Nyb3NzICIkQCInIF8gJGNyb3NzX2JtYyAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCglmaQkKfQpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDFfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpleHBvcnQgZGVidWdfbW9kZT0xCgoKaWYgWyAtbiAiJGhvc3QxIiBdICYmIFsgLW4gIiRob3N0MiIgXTsgdGhlbgoJaWYgW1sgIiRob3N0MSIgPT0gKi4qIF1dOyB0aGVuCiAgICBub2RlMV9ibWNpcD0iJGhvc3QxIgogICAgCiAgICBub2RlMl9ibWNpcD0iJGhvc3QyIgogIGVsc2UKICAgIG5vZGUxX2JtY2lwPSIke25vZGUxX2JtYyUuKn0uJGhvc3QxIgogICAgbm9kZTJfYm1jaXA9IiR7bm9kZTFfYm1jJS4qfS4kaG9zdDIiCiAgZmkKICAgIAoJbGlua19jcm9zc3RhbGsgJG5vZGUxX2JtY2lwICRub2RlMl9ibWNpcCAkdGVzdF9wb3J0ICAgIAplbHNlCiAgZWNobyAiLS0tLS0tIGNvbGxlY3QgYWxsIGNyb3NzIHRhbGsgZGF0YSA9PT0iCglsaW5rX2Nyb3NzdGFsayAkbm9kZThfYm1jICRub2RlNl9ibWMgNAoJbGlua19jcm9zc3RhbGsgJG5vZGU4X2JtYyAkbm9kZTVfYm1jIDYKCWxpbmtfY3Jvc3N0YWxrICRub2RlN19ibWMgJG5vZGU1X2JtYyA0CglsaW5rX2Nyb3NzdGFsayAkbm9kZTdfYm1jICRub2RlNl9ibWMgNgoJbGlua19jcm9zc3RhbGsgJG5vZGU2X2JtYyAkbm9kZTRfYm1jIDQKCWxpbmtfY3Jvc3N0YWxrICRub2RlNl9ibWMgJG5vZGUzX2JtYyA2CglsaW5rX2Nyb3NzdGFsayAkbm9kZTVfYm1jICRub2RlM19ibWMgNAoJbGlua19jcm9zc3RhbGsgJG5vZGU1X2JtYyAkbm9kZTRfYm1jIDYJCglsaW5rX2Nyb3NzdGFsayAkbm9kZTRfYm1jICRub2RlMl9ibWMgNAoJbGlua19jcm9zc3RhbGsgJG5vZGU0X2JtYyAkbm9kZTFfYm1jIDYKCWxpbmtfY3Jvc3N0YWxrICRub2RlM19ibWMgJG5vZGUxX2JtYyA0CQoJbGlua19jcm9zc3RhbGsgJG5vZGUzX2JtYyAkbm9kZTJfYm1jIDYJCglsaW5rX2Nyb3NzdGFsayAkbm9kZTJfYm1jICRub2RlOF9ibWMgNAoJbGlua19jcm9zc3RhbGsgJG5vZGUyX2JtYyAkbm9kZTdfYm1jIDYKCWxpbmtfY3Jvc3N0YWxrICRub2RlMV9ibWMgJG5vZGU3X2JtYyA0CglsaW5rX2Nyb3NzdGFsayAkbm9kZTFfYm1jICRub2RlOF9ibWMgNgoJI2xpbmtfY3Jvc3N0YWxrICRub2RlOF9ibWMgJG5vZGU3X2JtYyA4CgkjbGlua19jcm9zc3RhbGsgJG5vZGU2X2JtYyAkbm9kZTVfYm1jIDgKCSNsaW5rX2Nyb3NzdGFsayAkbm9kZTRf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IC1ndCAwICYmICEgIiQxIiA9fiBeLS0gXV07IGRvCiAgICAgICAgICAgICAgICBjYXNlICIkMSIgaW4KICAgICAgICAgICAgICAgICAgICByZXNldF9ncHUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2dwdV9mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBzZXRfdG9wbykKICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG9fZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5LiN5pSv5oyB55qE5rWL6K+V5Y+C5pWwICckMSfvvIzku4XmlK/mjIEgcmVzZXRfZ3B1IOaIliBzZXRfdG9wbyIKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICckMSfvvIzmlK/mjIHnmoTlj4LmlbDvvJotLW5vZGUgPOe8luWPtz4gLS10ZXN0IFtyZXNldF9ncHV8c2V0X3RvcG8uLi5dIgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCiMg5LuOSlNPTuivu+WPlumFjee9ru+8iGpx6Kej5p6Q77yJCm5vZGUxX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMV9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpzdGFyX25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgoKYm1jX2hvc3QxPSQoZWNobyAiJG5vZGUxX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mj0kKGVjaG8gIiRub2RlMl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDM9JChlY2hvICIkbm9kZTNfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q0PSQoZWNobyAiJG5vZGU0X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKCkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy9zdHJlc3MtNC02LThfbGlua3Nfb25ldGJfcmVjb3ZlcnlfQ01JUy1tb25fJChkYXRlICslWSVtJWRfJUglTSVTKS5sb2ciCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRHUFUjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2dwdSgpIHsgIAogICAgYWN0aXZlX3JlbW90ZTE9JDEKICAgIGdwdV9jb3VudD04CiAgICBlY2hvIC1lICJcbi0tLS0tLTpSRVNFVCAkYWN0aXZlX3JlbW90ZTEgR1BVIC0tLS0tLSIgPiYyCiAgICBmb3IgKChpPTE7IGk8PTM7IGkrKykpOyBkbwogICAgICAgIHJlc3RfZ3B1PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRhY3RpdmVfcmVtb3RlMSAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiYnJzbWkgcmVzZXQgLWdcIiInIDI+JjEpCiAgICAgICAgZWNobyAicmVzZXQgJGFjdGl2ZV9yZW1vdGUxIEdQVToiID4mMgogICAgICAgIGVjaG8gIiRyZXN0X2dwdSIgPiYyICAgIAogICAgICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkcmVzdF9ncHUiIHwgZ3JlcCAtYyAiR1BVWzAtN10gU3VjY2Vzc2VkLiIpCiAgICAgICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBzdWNjZXNzIiA+JjIKICAgICAgICAgICAgYnJlYWsgICAgICAgIAogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIGZhaWwiID4mMgogICAgICAgICAgICAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDIwCiAgICBkb25lCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2Rpc2FibGVfYWxsX2x0c3NtIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaXNhYmxlX2FsbF9sdHNzbSgpIHsgICAKICAgIG5vZGVfaXA9JDEgICAgCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BVIHBvcnTmmK/lkKbph43nva7miJDlip8KICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2xvY2FsZ3B1IiB8IGdyZXAgLWNFICdeR1BVIFswLTddLCBIV1xbWzAtOV0rXF06IGRpc2FibGUgbHRzc20gXCgyLCA0LCA2LCA4LCAxMFwpIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCmRpc2FibGVfcG9ydF9sdHNzbSgpIHsKICAgIG5vZGVfaXA9JDEKICAgIG5vZGVfcG9ydD0kMgogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIHBvcnQkbm9kZV9wb3J0IGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BV5piv5ZCm6YeN572u5oiQ5YqfICAgIAogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfZ3B1cG9ydCIgfCBncmVwIC1jICdIV1xbWzAtN11cXTogZGlzYWJsZSBsdHNzbSAnJG5vZGVfcG9ydCcgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRFWFAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2V4cCgpIHsgICAKICAgIGxvY2FsIGhvc3Q9IiQxIgogICAgbG9jYWwgcG9ydD0iJDIiICAKICAgIGVjaG8gJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICBzbGVlcCAzCiAgICBlY2hvICJjaGVrIEVYUCBzdGF0Li4uIgogICAgZXhwX3N0YXRlPSQoJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgc3RhdCAyPiYxKQkKICAgIGVjaG8gImV4cCBzdGF0ZToiCiAgICBlY2hvICIkZXhwX3N0YXRlIiAKICAgIHRpbV9zd190aW1lPSQoZWNobyAiJGV4cF9zdGF0ZSIgfCBncmVwICJUSU1fU1c6IiB8IHNlZCAtbiAncy8uKlRJTV9TVzogXChbXixdKlwpLiovXDEvcCcpCiAgICBzZWNfcGFydD0kKGVjaG8gIiR0aW1fc3dfdGltZSIgfCBhd2sgLUYnOicgJ3twcmludCAkTkZ9JykKICAgIHNlY29uZHNfc3RyPSQoZWNobyAiJHNlY19wYXJ0IiB8IHRyIC1kICdcbicgfCBncmVwIC1vRSAnWzAtOV0rJyB8IGhlYWQgLW4xKQogICAgaWYgW1sgIiRzZWNvbmRzX3N0ciIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBzZWNvbmRzPSQoKDEwIyRzZWNvbmRzX3N0cikpCiAgICBlbHNlCiAgICAgICAgZWNobyAi56eS5pWw5qC85byP5peg5pWI77yI5o+Q5Y+W5YC8OiBbJHNlY29uZHNfc3RyXSwg6KeG5Li6RkFJTCIgICAgICAgIAogICAgICAgIGNvbnRpbnVlCiAgICBmaQogICAgIyDliKTmlq3nu5PmnpwKICAgIGlmIFsgIiRzZWNvbmRzIiAtbHQgNSBdOyB0aGVuICAgICAgICAKICAgICAgICBlY2hvIC1lICJFWFAgcmVzZXQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gIlRJTV9TVzogJHNlY29uZHMgcywgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uPSJHUFUgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIHJldHVybiAyCiAgICBmaQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNsb2FkIEJMLTE2IHRvcG8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfYmwxNl90b3BvKCkgewogICAgbm9kZV9pcD0kMSAgICAgCiAgICBlY2hvIC1lICJcbi0tLS1sb2FkLWdwdS10b3BvIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfN3AuanNvblwiIicKICAgICAgIAogICAgb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF83cC5qc29uXCIiJyAyPiYxKQogICAgc2xlZXAgMQogICAgZWNobyAibG9hZCB0b3BvIHJlc3VsdDoiCiAgICBlY2hvICIkb3V0cHV0IiAgICAKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNMSU5LVVAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm9uZXRfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZTFfaXA9JDEKICAgIGxvY2FsIG5vZGUxX3BvcnQ9JDIKICAgIGxvY2FsIG5vZGUyX2lwPSQzCiAgICBsb2NhbCBub2RlMl9wb3J0PSQ0ICAgCgogICAgZWNobyAtZSAiXG4tLS0tT05FVC0gTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgIAogICAgc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJyAmCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlMl9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKb25vY19saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlX2lwPSQxCiAgICBsb2NhbCBub2RlX3BvcnQ9JDIKCiAgICBlY2hvIC1lICJcbi0tLS1PTk9DLUxJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJwogICAgICAgICAgICAKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZV9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjR1BVU1BFRUQjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmdwdV9zcGVlZCgpIHsKICAgIGhvc3Q9JDEKICAgIHBvcnQ9JDIKCiAgICAjLS0tLS0tLS0tLS0gY2hlY2sgYWxsIEdQVSBwb3J0IGlzIEdFTjVYOCBvciBub3QtLS0tLS0tLS0tLS0tCiAgICBlY2hvIC1lICJcbi0tLS1PTkVUQS0gY2hlY2sgYWxsIEdQVSBwb3J0ICRwb3J0IGlzIEdFTjVYOCBvciBub3QgLS0tLSIgCiAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbyAgICAgICAKICAgICAgICBHRU41X3BhdHRlcm49IlBvcnQgJHBvcnQ6IEdFTjogNSwgV2lkdGg6IDgiCiAgICAgICAgZXhwZWN0ZWRfY291bnQ9OCAgICAgICAgCiAgICAgICAgbGluazFfZnVsbD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtY1wiIicpCiAgICAgICAgbGluazFfR0VOPSQoZWNobyAiJGxpbmsxX2Z1bGwiIHwgZ3JlcCAgIlBvcnQgJHBvcnQiIDI+JjEpIAogICAgICAgIGVjaG8gLWUgImxpbmsxOlxuICRsaW5rMV9HRU4iCiAgICAgICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfR0VOIiB8IGdyZXAgLWMgIiRHRU41X3BhdHRlcm4iIDI+JjEpCiAgICAgICAgZWNobyAibGluazEgZ2VuNSBjb3VudDogJGxpbmsxX2NvdW50IgkKICAgICAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGV4cGVjdGVkX2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IHN1Y2Nlc3MiCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbj0iUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgNgogICAgZG9uZQp9CgojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbyAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0g5Y6L5rWLbGlua3VwIOa1i+ivleesrCRpIOi9riA9PT09PT09PT09PT09PT0iCiAgICBlY2hvICAgIAogICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgIGZhaWxfcmVhc29uPSIiCiAgICAKICAgICMjIyMjIyMjIyMjc2V0IDRHIFRPUE8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYgWyAiJHNldF90b3BvX2ZsYWciID0gdHJ1ZSBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiXG49PT09PT0gc2V0IDRHIHRvb3AgPT09PT09IgogICAgICAgIGVjaG8KICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA4IG9uZXRhICYKICAgICAgICB3YWl0CiAgICAgICAgZWNobyAgICAgICAgCiAgICBmaQoKICAgICNSRVNFVCA0RyBHUFUKICAgIGlmIFsgIiRyZXNldF9ncHVfZmxhZyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbj09PT09PSByZXNldCA0RyBHUFUgPT09PT09IgogICAgICAgIGVjaG8KICAgICAgICBlY2hvIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcAogICAgICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcCAmCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUyX2lwICYKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTNfaXAgJgogICAgICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlNF9pcCAmCiAgICAgICAgd2FpdAogICAgICAgIHNsZWVwIDMKICAgICAgICBlY2hvCiAgICBmaQoKICAgICNkaXNhYmxlX2FsbF9sdHNzbQogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tLS0gZGlzYWJsZSBsdHNzbSAtLS0tLS0iCiAgICBub2Rlcz0oIiRub2RlMV9pcCIgIiRub2RlMl9pcCIgIiRub2RlM19pcCIgIiRub2RlNF9pcCIpICAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gICAgICAgIAogICAgICAgIGlmICEgZGlzYWJsZV9wb3J0X2x0c3NtICIkbm9kZSIgODsgdGhlbgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgR1BVIGRpc2FibGUgcG9ydCBmYWlsIG9uIG5vZGUgJG5vZGU7ICIKICAgICAgICBmaSAgICAgICAgCiAgICBkb25lCgogICAgc2xlZXAgMQogICAgCiAgICAjUkVTRVRFWFAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXJlc2V0IGV4cCAtLS0tIiAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9leHBfY29sZF9yZXNldC5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCkKICAgIHNsZWVwIDEKICAgIAogICAgI2xvYWRpbmcgQkwtMTYgdG9wbwogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvICAgICAgICAKICAgICAgICBpZiAhIGxvYWRfYmwxNl90b3BvICIkbm9kZSI7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBsb2FkIHRvcG8gZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgICNPQ1MtU0NSRUVOCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1vY3Nfc2NyZWVuIGJlZm9yZSBsaW5rdXAtLS0tIiAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCgogICAgI29uZXQgbGlua3VwCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMV9pcCAiOCIgJG5vZGUyX2lwICI4IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIG9uZXQgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgIAogICAgc2xlZXAgMiAgCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlM19pcCAiOCIgJG5vZGU0X2lwICI4IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIG9uZXQgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgICAKICAgIHNsZWVwIDIgCiAgICAKICAgICNvbm9jIGxpbmt1cAogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAKICAgIHBvcnRzPSgyIDQgNikgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvIAogICAgICAgIGZvciBwb3J0IGluICIke3BvcnRzW0BdfSI7IGRvICAgICAgCiAgICAgICAgICAgIGlmICEgb25vY19saW5rdXAgJG5vZGUgJHBvcnQ7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBvbm9jIGxpbmt1cCBmYWlsOyAiCiAgICAgICAgICAgIGZpIAogICAgICAgIGRvbmUgICAgICAgCiAgICBkb25lCgogICAgI29jcy1zY3JlZW4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDEwcyBv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aWdzLmpzb24iICAKdGFyZ2V0X3N0YXJfbm9kZT0iIgpub2RlMV9pcD0iIgpub2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKZmlyc3Rfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCnNlY29uZF9ub2RlPSIkKCh0YXJnZXRfc3Rhcl9ub2RlICsgNCkpIgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlN19ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZThfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDU9JChlY2hvICIkbm9kZTVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q2PSQoZWNobyAiJG5vZGU2X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nz0kKGVjaG8gIiRub2RlN19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDg9JChlY2hvICIkbm9kZThfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCgpjb2xsZWN0X29uZXRfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSIkMSIKICAgIGxvY2FsIGFjdGl2ZV9ibWNpcD0iJHshYWN0aXZlX2JtY30iICAKICAgIGxvY2FsIF9hY3RpdmVfbm9kZT0iJHthY3RpdmVfYm1jJV9ibWN9IgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDIKICAgIGxvY2FsIGNyb3NzX2JtYz0kMwogICAgbG9jYWwgY3Jvc3NfYm1jaXA9IiR7IWNyb3NzX2JtY30iICAKICAgIGxvY2FsIF9jcm9zc19ub2RlPSIke2Nyb3NzX2JtYyVfYm1jfSIKICAgIGxvY2FsIGNyb3NzX3BvcnQ9JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jaXAiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWNpcCIKCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2FjdGl2ZV9ub2RlICRzdGFyX25vZGUpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoY29udmVydF9ub2RlICRfY3Jvc3Nfbm9kZSAkc3Rhcl9ub2RlKQogIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUgIAogICAgI2Rpc2FibGUgb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG53YWl0IDEwcywgb2NzIHN0YWJsZS4uLiIKICAgIHNsZWVwIDEwCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IGRhdGEgLS0tLS0iCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtY2lwIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgIGxvY2FsIGNyb3NzX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGNyb3NzX2JtY2lwIC1lICRjcm9zc19wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X2NtaXMgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X2NtaXMiCiAgICBzbGVlcCAyCiAgICBsb2NhbCBjcm9zc19wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAyPiYxKQogICAgbG9jYWwgYWN0aXZlX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgMj4mMSkKICAgICAgICAgICAgCiAgICAjIOiwg+ivlei+k+WHuu+8iOaMiemcgOW8gOWQr++8iQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfcnNzaSAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfcnNzaSIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9yc3NpICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X3Jzc2kiCiAgICAgICAgCiAgICBlY2hvIC1lICJcbi0tLS0g6LCD55SoIFB5dGhvbiDliIbmnpAgJGFjdGl2ZV9wb3J0IOaVsOaNriAtLS0tIiAgICAKICAgIGV4cG9ydCBDU1ZfRklMRT0iJGNzdl9maWxlIgogICAgZXhwb3J0IExPT1A9IiRpIgogICAgZXhwb3J0IEFDVElWRV9QT1JUPSIkYWN0aXZlX25vZGUtUCRhY3RpdmVfcG9ydCIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVD0iJGNyb3NzX25vZGUtUCRjcm9zc19wb3J0IgogICAgZXhwb3J0IEFDVElWRV9QT1JUX1JTU0k9IiRhY3RpdmVfcG9ydF9yc3NpIiBBQ1RJVkVfUE9SVF9DTUlTPSIkYWN0aXZlX3BvcnRfY21pcyIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVF9SU1NJPSIkY3Jvc3NfcG9ydF9yc3NpIiBDUk9TU19QT1JUX0NNSVM9IiRjcm9zc19wb3J0X2NtaXMiCgogICAgcHl0aG9uMyBjb2xsZWN0X3Rlc3RfZGF0YV9vbm9jX3Jzc2kucHkgCiAgICAKICAgIHVuc2V0IENTVl9GSUxFIExPT1AgQUNUSVZFX0JNQyBBQ1RJVkVfUE9SVCBDUk9TU19CTUMgQ1JPU1NfUE9SVAogICAgdW5zZXQgQUNUSVZFX1BPUlRfUlNTSSBBQ1RJVkVfUE9SVF9DTUlTIENST1NTX1BPUlRfUlNTSSBDUk9TU19QT1JUX0NNSVMgICAgCgogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZV9ibWMgYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCDmlbDmja7lpITnkIblrozmiJAgPT09PT09PT09PT09PT09XG4iCiAgICBzbGVlcCAyCgkgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZSBjcm9zc19wb3J0ID09PT09PT09PT09PT09PVxuIgogICAgI2FjdGl2ZSBjcm9zc19wb3J0ICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUJCn0KTE9HX0ZJTEU9ImxvZ3Mvc3VtbWFyeV9sb2dzLzYyX3N0cmVzc18xMy0xNi1vbm9jX2NoZWNrX29jc3Bvd2VyXyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotb25ldF9zd2ItY3Jvc3N0YWxrLWFfb2NzX3Jzc2lfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgoKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZGVidWdfbW9kZT0xCgplY2hvIC1lICJcbj09PT09PSBzZXQgc3Bub2RlMSAgdG9wbyA9PT09PT0iCmVjaG8KI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNCBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDYgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDggb25vYzYgJgplY2hvCmVjaG8gLWUgIlxuPT09PT09IHNldCBzcG5vZGUyICB0b3BvID09PT09PSIKZWNobwojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTVfYm1jIDQgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU1X2JtYyA2IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNl9ibWMgNCBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTZfYm1jIDYgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU3X2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlN19ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZThfYm1jIDQgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU4X2JtYyA2IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgOCBvbm9jNiAmCndhaXQKZWNobyAgICAgICAgCgoKZm9yICgoaT0xOyBpPD0kbG9vcF90aW1lczsgaSsrKSk7IGRvCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PSDnrKwgJGkg6L2u5b6q546vID09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKCiAgICAjc3Bub2RlMQogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU4X2JtYyA0IG5vZGU2X2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTZfYm1jIDQgbm9kZThfYm1jIDQKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlOF9ibWMgNiBub2RlNV9ibWMgNgoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU1X2JtYyA2IG5vZGU4X2JtYyA2CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTdfYm1jIDQgbm9kZTVfYm1jIDQKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNV9ibWMgNCBub2RlN19ibWMgNAogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU3X2JtYyA2IG5vZGU2X2JtYyA2Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTZfYm1jIDYgbm9kZTdfYm1jIDYKICAgICNzcG5vZGUyCiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTRfYm1jIDQgbm9kZTJfYm1jIDQKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlMl9ibWMgNCBub2RlNF9ibWMgNAogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU0X2JtYyA2IG5vZGUxX2JtYyA2Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTFfYm1j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ZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICBlc2FjCmRvbmUKCiMg5qCh6aqM5L6d6LWW5ZKM6YWN572u5paH5Lu2CmlmICEgY29tbWFuZCAtdiBqcSAmPiAvZGV2L251bGw7IHRoZW4KICAgIGVjaG8gIumUmeivr++8muacquWuieijhSBqcSDlt6XlhbfvvIzor7flhYjmiafooYwgJ3l1bSBpbnN0YWxsIGpxIC15JyDmiJYgJ2FwdCBpbnN0YWxsIGpxIC15JyDlronoo4UiCiAgICBleGl0IDEKZmkKaWYgW1sgLXogIiR0YXJnZXRfc3Rhcl9ub2RlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5b+F6aG76YCa6L+HIC0tbm9kZSDmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgZXhpdCAxCmZpCmlmIFtbICEgLWYgIiRjb25maWdfZmlsZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tiAkY29uZmlnX2ZpbGUg5LiN5a2Y5Zyo77yM6K+35qOA5p+l6Lev5b6EIgogICAgZXhpdCAxCmZpCgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCiMg5qCh6aqM6YWN572u5a6M5pW05oCnCmlmIFtbICIkbm9kZTFfaXAiID09ICJudWxsIiB8fCAteiAiJG5vZGUxX2lwIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu25Lit5pyq5om+5YiwIHN0YXJfbm9kZT0kdGFyZ2V0X3N0YXJfbm9kZSDnmoTmnInmlYjphY3nva4iCiAgICBleGl0IDEKZmkKCmNvbnZlcnRfbm9kZSgpIHsKICAgIGxvY2FsIGlucHV0X25vZGU9IiQxIgogICAgbG9jYWwgc3RhcnRfbm9kZT0iJDIiCiAgICBsb2NhbCBub2RlX3N1ZmZpeAogICAgbG9jYWwgdGFyZ2V0X25vZGVfbnVtCiAgICBsb2NhbCB0YXJnZXRfbm9kZSAgICAKICAgIG5vZGVfc3VmZml4PSQoZWNobyAiJGlucHV0X25vZGUiIHwgc2VkIC1uRSAncy9ebm9kZShbMC05XSspJC9cMS9wJykKCiAgICBpZiBbWyAteiAiJG5vZGVfc3VmZml4IiBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui+k+WFpSBub2RlIOagvOW8j+aXoOaViO+8jOmcgOS4uiAnbm9kZSvmlbDlrZcn77yI5aaCIG5vZGUx44CBbm9kZTLvvIkiID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgaWYgISBbWyAiJHN0YXJ0X25vZGUiID1+IF5bMC05XSskIF1dOyB0aGVuCiAgICAgICAgZWNobyAi6ZSZ6K+v77ya6LW35aeL5YGP56e76YeP6ZyA5Li65q2j5pW05pWwIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIAogICAgdGFyZ2V0X25vZGVfbnVtPSQoKG5vZGVfc3VmZml4ICsgc3RhcnRfbm9kZSAtIDEpKQogICAgdGFyZ2V0X25vZGU9Im5vZGUkdGFyZ2V0X25vZGVfbnVtIgogICAgZWNobyAiJHRhcmdldF9ub2RlIgogICAgcmV0dXJuIDAKfQoKCmNvbGxlY3Rfb25vY19jcm9zcygpIHsKICAgIGxvY2FsIGFjdGl2ZV9ibWM9IiQxIgogICAgbG9jYWwgYWN0aXZlX2JtY2lwPSIkeyFhY3RpdmVfYm1jfSIgIAogICAgbG9jYWwgX2FjdGl2ZV9ub2RlPSIke2FjdGl2ZV9ibWMlX2JtY30iCiAgICBsb2NhbCBhY3RpdmVfcG9ydD0kMgogICAgbG9jYWwgY3Jvc3NfYm1jPSQzCiAgICBsb2NhbCBjcm9zc19ibWNpcD0iJHshY3Jvc3NfYm1jfSIgIAogICAgbG9jYWwgX2Nyb3NzX25vZGU9IiR7Y3Jvc3NfYm1jJV9ibWN9IgogICAgbG9jYWwgY3Jvc3NfcG9ydD0kNAogICAgbG9jYWwgYWN0aXZlX2hvc3Q9Imh0dHBzOi8vJGFjdGl2ZV9ibWNpcCIKICAgIGxvY2FsIGNyb3NzX2hvc3Q9Imh0dHBzOi8vJGNyb3NzX2JtY2lwIgoKICAgIGxvY2FsIGFjdGl2ZV9ub2RlPSQoY29udmVydF9ub2RlICRfYWN0aXZlX25vZGUgJHN0YXJfbm9kZSkKICAgIGxvY2FsIGNyb3NzX25vZGU9JChjb252ZXJ0X25vZGUgJF9jcm9zc19ub2RlICRzdGFyX25vZGUpCiAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0gYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCA9PT09PT09PT09PT09PT0iCiAgICAjYWN0aXZhdGVfb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDAgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAgCiAgICAjZGlzYWJsZSBvY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZQogICAgCiAgICBlY2hvIC1lICJcbndhaXQgMTBzLCBvY3Mgc3RhYmxlLi4uIgogICAgc2xlZXAgMTAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgZGF0YSAtLS0tLSIKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRhY3RpdmVfYm1jaXAgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jaXAgLWUgJGNyb3NzX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfY21pcyAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9jbWlzIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgIHNsZWVwIDIKICAgIGxvY2FsIGNyb3NzX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IDI+JjEpCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKQogICAgICAgICAgICAKICAgICMg6LCD6K+V6L6T5Ye677yI5oyJ6ZyA5byA5ZCv77yJCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9yc3NpICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9yc3NpIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X3Jzc2kgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfcnNzaSIKICAgICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLSDosIPnlKggUHl0aG9uIOWIhuaekCAkYWN0aXZlX3BvcnQg5pWw5o2uIC0tLS0iICAgIAogICAgZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCiAgICBleHBvcnQgTE9PUD0iJGkiCiAgICBleHBvcnQgQUNUSVZFX1BPUlQ9IiRhY3RpdmVfbm9kZS1QJGFjdGl2ZV9wb3J0IiAKICAgIGV4cG9ydCBDUk9TU19QT1JUPSIkY3Jvc3Nfbm9kZS1QJGNyb3NzX3BvcnQiCiAgICBleHBvcnQgQUNUSVZFX1BPUlRfUlNTST0iJGFjdGl2ZV9wb3J0X3Jzc2kiIEFDVElWRV9QT1JUX0NNSVM9IiRhY3RpdmVfcG9ydF9jbWlzIiAKICAgIGV4cG9ydCBDUk9TU19QT1JUX1JTU0k9IiRjcm9zc19wb3J0X3Jzc2kiIENST1NTX1BPUlRfQ01JUz0iJGNyb3NzX3BvcnRfY21pcyIKCiAgICBweXRob24zIGNvbGxlY3RfdGVzdF9kYXRhX29ub2NfcnNzaS5weSAKICAgIAogICAgdW5zZXQgQ1NWX0ZJTEUgTE9PUCBBQ1RJVkVfQk1DIEFDVElWRV9QT1JUIENST1NTX0JNQyBDUk9TU19QT1JUCiAgICB1bnNldCBBQ1RJVkVfUE9SVF9SU1NJIEFDVElWRV9QT1JUX0NNSVMgQ1JPU1NfUE9SVF9SU1NJIENST1NTX1BPUlRfQ01JUyAgICAKCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0kYWN0aXZlX2JtYyBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IOaVsOaNruWkhOeQhuWujOaIkCA9PT09PT09PT09PT09PT1cbiIKICAgIHNsZWVwIDIgIAp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKY3N2X2ZpbGU9ImNzdl9kYXRhLzYyX3N0cmVzc18xMy0xNi1vbm9jX2NoZWNrX29jc3Bvd2VyXyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgoKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZGVidWdfbW9kZT0xCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8KICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09IOesrCAkaSDova7lvqrnjq8gPT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgoKICAgICNwb3J0IDgKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgOCBub2RlMl9ibWMgOCAgICAKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMl9ibWMgOCBub2RlMV9ibWMgOAogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUzX2JtYyA4IG5vZGU0X2JtYyA4CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTRfYm1jIDggbm9kZTNfYm1jIDgKICAgICNwb3J0NAogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUxX2JtYyA0IG5vZGUzX2Jt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ICAgLS1ub2RlKQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICAjIOagoemqjC0tbm9kZeWPguaVsOacieaViOaApwogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLW5vZGUg5ZCO5b+F6aG75oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICB0YXJnZXRfc3Rhcl9ub2RlPSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAtLXRlc3QpCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIHJ1bl9hbGw9ZmFsc2UKICAgICAgICAgICAgIyDlpITnkIYtLXRlc3TlkI7lpJrkuKrlj4LmlbAKICAgICAgICAgICAgd2hpbGUgW1sgJCMgLWd0IDAgJiYgISAiJDEiID1+IF4tLSBdXTsgZG8KICAgICAgICAgICAgICAgIGNhc2UgIiQxIiBpbgogICAgICAgICAgICAgICAgICAgIHJlc2V0X2dwdSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfZ3B1X2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIHNldF90b3BvKQogICAgICAgICAgICAgICAgICAgICAgICBzZXRfdG9wb19mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJrkuI3mlK/mjIHnmoTmtYvor5Xlj4LmlbAgJyQxJ++8jOS7heaUr+aMgSByZXNldF9ncHUg5oiWIHNldF90b3BvIgogICAgICAgICAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICLplJnor6/vvJrmnKrnn6Xlj4LmlbAgJyQxJ++8jOaUr+aMgeeahOWPguaVsO+8mi0tbm9kZSA857yW5Y+3PiAtLXRlc3QgW3Jlc2V0X2dwdXxzZXRfdG9wby4uLl0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyPliqDovb1KU09O6YWN572uIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg5qCh6aqM5L6d6LWW5ZKM6YWN572u5paH5Lu2CmlmICEgY29tbWFuZCAtdiBqcSAmPiAvZGV2L251bGw7IHRoZW4KICAgIGVjaG8gIumUmeivr++8muacquWuieijhSBqcSDlt6XlhbfvvIzor7flhYjmiafooYwgJ3l1bSBpbnN0YWxsIGpxIC15JyDmiJYgJ2FwdCBpbnN0YWxsIGpxIC15JyDlronoo4UiCiAgICBleGl0IDEKZmkKaWYgW1sgLXogIiR0YXJnZXRfc3Rhcl9ub2RlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5b+F6aG76YCa6L+HIC0tbm9kZSDmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgZXhpdCAxCmZpCmlmIFtbICEgLWYgIiRjb25maWdfZmlsZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tiAkY29uZmlnX2ZpbGUg5LiN5a2Y5Zyo77yM6K+35qOA5p+l6Lev5b6EIgogICAgZXhpdCAxCmZpCgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCiMg5qCh6aqM6YWN572u5a6M5pW05oCnCmlmIFtbICIkbm9kZTFfaXAiID09ICJudWxsIiB8fCAteiAiJG5vZGUxX2lwIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu25Lit5pyq5om+5YiwIHN0YXJfbm9kZT0kdGFyZ2V0X3N0YXJfbm9kZSDnmoTmnInmlYjphY3nva4iCiAgICBleGl0IDEKZmkKCkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy9zdHJlc3MtNC02LThfbGlua3Nfb25ldGJfcmVjb3ZlcnlfQ01JUy1tb25fJChkYXRlICslWSVtJWRfJUglTSVTKS5sb2ciCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRHUFUjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2dwdSgpIHsgIAogICAgYWN0aXZlX3JlbW90ZTE9JDEKICAgIGdwdV9jb3VudD04CiAgICBlY2hvIC1lICJcbi0tLS0tLTpSRVNFVCAkYWN0aXZlX3JlbW90ZTEgR1BVIC0tLS0tLSIgPiYyCiAgICBmb3IgKChpPTE7IGk8PTM7IGkrKykpOyBkbwogICAgICAgIHJlc3RfZ3B1PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRhY3RpdmVfcmVtb3RlMSAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiYnJzbWkgcmVzZXQgLWdcIiInIDI+JjEpCiAgICAgICAgZWNobyAicmVzZXQgJGFjdGl2ZV9yZW1vdGUxIEdQVToiID4mMgogICAgICAgIGVjaG8gIiRyZXN0X2dwdSIgPiYyICAgIAogICAgICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkcmVzdF9ncHUiIHwgZ3JlcCAtYyAiR1BVWzAtN10gU3VjY2Vzc2VkLiIpCiAgICAgICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBzdWNjZXNzIiA+JjIKICAgICAgICAgICAgYnJlYWsgICAgICAgIAogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIGZhaWwiID4mMiAgICAgICAgICAgIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgMjAKICAgIGRvbmUKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2Rpc2FibGVfYWxsX2x0c3NtIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaXNhYmxlX2FsbF9sdHNzbSgpIHsgICAKICAgIG5vZGVfaXA9JDEgICAgCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BVIHBvcnTmmK/lkKbph43nva7miJDlip8KICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2xvY2FsZ3B1IiB8IGdyZXAgLWNFICdeR1BVIFswLTddLCBIV1xbWzAtOV0rXF06IGRpc2FibGUgbHRzc20gXCgyLCA0LCA2LCA4LCAxMFwpIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCmRpc2FibGVfcG9ydF9sdHNzbSgpIHsKICAgIG5vZGVfaXA9JDEKICAgIG5vZGVfcG9ydD0kMgogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIHBvcnQkbm9kZV9wb3J0IGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BV5piv5ZCm6YeN572u5oiQ5YqfICAgIAogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfZ3B1cG9ydCIgfCBncmVwIC1jICdIV1xbWzAtN11cXTogZGlzYWJsZSBsdHNzbSAnJG5vZGVfcG9ydCcgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRFWFAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2V4cCgpIHsgICAKICAgIGxvY2FsIGhvc3Q9IiQxIgogICAgbG9jYWwgcG9ydD0iJDIiICAKICAgIGVjaG8gJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICBzbGVlcCAzCiAgICBlY2hvICJjaGVrIEVYUCBzdGF0Li4uIgogICAgZXhwX3N0YXRlPSQoJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgc3RhdCAyPiYxKQkKICAgIGVjaG8gImV4cCBzdGF0ZToiCiAgICBlY2hvICIkZXhwX3N0YXRlIiAKICAgIHRpbV9zd190aW1lPSQoZWNobyAiJGV4cF9zdGF0ZSIgfCBncmVwICJUSU1fU1c6IiB8IHNlZCAtbiAncy8uKlRJTV9TVzogXChbXixdKlwpLiovXDEvcCcpCiAgICBzZWNfcGFydD0kKGVjaG8gIiR0aW1fc3dfdGltZSIgfCBhd2sgLUYnOicgJ3twcmludCAkTkZ9JykKICAgIHNlY29uZHNfc3RyPSQoZWNobyAiJHNlY19wYXJ0IiB8IHRyIC1kICdcbicgfCBncmVwIC1vRSAnWzAtOV0rJyB8IGhlYWQgLW4xKQogICAgaWYgW1sgIiRzZWNvbmRzX3N0ciIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBzZWNvbmRzPSQoKDEwIyRzZWNvbmRzX3N0cikpCiAgICBlbHNlCiAgICAgICAgZWNobyAi56eS5pWw5qC85byP5peg5pWI77yI5o+Q5Y+W5YC8OiBbJHNlY29uZHNfc3RyXSwg6KeG5Li6RkFJTCIgICAgICAgIAogICAgICAgIGNvbnRpbnVlCiAgICBmaQogICAgIyDliKTmlq3nu5PmnpwKICAgIGlmIFsgIiRzZWNvbmRzIiAtbHQgNSBdOyB0aGVuICAgICAgICAKICAgICAgICBlY2hvIC1lICJFWFAgcmVzZXQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gIlRJTV9TVzogJHNlY29uZHMgcywgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uPSJHUFUgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIHJldHVybiAyCiAgICBmaQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNsb2FkIGdwdSB0b3BvIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpsb2FkX2dwdXRvcG8oKSB7CiAgICBub2RlX2lwPSQxIAogICAgZ3B1X3RvcG89JDIKICAgIGVjaG8gLWUgIlxuLS0tLWxvYWQtZ3B1LXRvcG8gLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF82cF8zMi5qc29uXCIiJwogICAgICAgCiAgICBvdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzZwXzMyLmpzb25cIiInIDI+JjEpCiAgICBzbGVlcCAxCiAgICBlY2hvICJsb2FkIHRvcG8gcmVzdWx0OiIKICAgIGVjaG8gIiRvdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgICMgaHdpZF9jb3VudD04CiAgICAjIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlMl9wb3J0XF06IFJlYWR5IikgICAgCiAgICAjIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkaHdpZF9jb3VudCBdOyB0aGVuCiAgICAjICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgIyAgICAgcmV0dXJuIDAgCiAgICAjIGVsc2UKICAgICMgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAjICAgICByZXR1cm4gMCAKICAgICMgZmkgCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0xJTktVUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKb25ldF9saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlMV9pcD0kMQogICAgbG9jYWwgbm9kZTFfcG9ydD0kMgogICAgbG9jYWwgbm9kZTJfaXA9JDMKICAgIGxvY2FsIG5vZGUyX3BvcnQ9JDQgICAKCiAgICBlY2hvIC1lICJcbi0tLS1PTkVULSBMSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJwogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgCiAgICBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInICYKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGUyX3BvcnRcXTogUmVhZHkiKSAgICAKICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkaHdpZF9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMCAKICAgIGVsc2UKICAgICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgICAgIHJldHVybiAwIAogICAgZmkgCgogICAgc2xlZXAgMQp9Cgpvbm9jX2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGVfaXA9JDEKICAgIGxvY2FsIG5vZGVfcG9ydD0kMgoKICAgIGVjaG8gLWUgIlxuLS0tLU9OT0MtTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInCiAgICAgICAgICAgIAogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlX3BvcnRcXTogUmVhZHkiKSAgICAKICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkaHdpZF9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMCAKICAgIGVsc2UKICAgICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgICAgIHJldHVybiAwIAogICAgZmkgCgogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNHUFVTUEVFRCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZ3B1X3NwZWVkKCkgewogICAgaG9zdD0kMQogICAgcG9ydD0kMgoKICAgICMtLS0tLS0tLS0tLSBjaGVjayBhbGwgR1BVIHBvcnQgaXMgR0VONVg4IG9yIG5vdC0tLS0tLS0tLS0tLS0KICAgIGVjaG8gLWUgIlxuLS0tLU9ORVRBLSBjaGVjayBhbGwgR1BVIHBvcnQgJHBvcnQgaXMgR0VONVg4IG9yIG5vdCAtLS0tIiAKICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvICAgICAgIAogICAgICAgIEdFTjVfcGF0dGVybj0iUG9ydCAkcG9ydDogR0VOOiA1LCBXaWR0aDogOCIKICAgICAgICBleHBlY3RlZF9jb3VudD04ICAgICAgICAKICAgICAgICBsaW5rMV9mdWxsPSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1jXCIiJykKICAgICAgICBsaW5rMV9HRU49JChlY2hvICIkbGluazFfZnVsbCIgfCBncmVwICAiUG9ydCAkcG9ydCIgMj4mMSkgCiAgICAgICAgZWNobyAtZSAibGluazE6XG4gJGxpbmsxX0dFTiIKICAgICAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9HRU4iIHwgZ3JlcCAtYyAiJEdFTjVfcGF0dGVybiIgMj4mMSkKICAgICAgICBlY2hvICJsaW5rMSBnZW41IGNvdW50OiAkbGluazFfY291bnQiCQogICAgICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkZXhwZWN0ZWRfY291bnQgXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggc3VjY2VzcyIKICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgICAgICAgICAgYnJlYWsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uPSJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCA2CiAgICBkb25lCn0KCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZm9yICgoaT0xOyBpPD0kbG9vcF90aW1lczsgaSsrKSk7IGRvICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSDljovmtYtsaW5rdXAg5rWL6K+V56ysJGkg6L2uID09PT09PT09PT09PT09PSIKICAgIGVjaG8gICAgCiAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgZmFpbF9yZWFzb249IiIKICAgICAgICAKICAgICMjIyMjIyMjIyMjc2V0IDRHIFRPUE8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYgWyAiJHNldF90b3BvX2ZsYWciID0gdHJ1ZSBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiXG49PT09PT0gc2V0IDRHIHRvb3AgPT09PT09IgogICAgICAgIGVjaG8KICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA0IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA2IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA4IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA0IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA4IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA0IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA2IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA4IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA0IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA2IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA4IG9ub2M2ICYKICAgICAgICB3YWl0CiAgICAgICAgZWNobyAgICAgICAgCiAgICBmaQoKICAgICNSRVNFVCA0RyBHUFUKICAgIGVjaG8gLWUgIlxuPT09PT09IHJlc2V0IDRHIEdQVSA9PT09PT0iCiAgICBpZiBbICIkcmVzZXRfZ3B1X2ZsYWciID0gdHJ1ZSBdOyB0aGVuICAgICAgICAKICAgICAgICBlY2hvCiAgICAgICAgZWNobyBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAgJgogICAgICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMl9pcCAmCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUzX2lwICYKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTRfaXAgJgogICAgICAgIHdhaXQKICAgICAgICBzbGVlcCAzCiAgICAgICAgZWNobwogICAgZmkKCiAgICAjZGlzYWJsZV9hbGxfbHRzc20KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLS0tIFJFU0VUICBHUFUgLS0tLS0tIgogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvICAgICAgICAKICAgICAgICBpZiAhIGRpc2FibGVfYWxsX2x0c3NtICIkbm9kZSI7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBkaXNhYmxlIHBvcnQgZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgIHNsZWVwIDEKICAgIAogICAgI1JFU0VURVhQCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1yZXNldCBleHAgLS0tLSIgCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvZXhwX2NvbGRfcmVzZXQucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDgpCiAgICBzbGVlcCAxCiAgICAKICAgICNsb2FkaW5nIEdQVSB0b3BvCiAgICBub2Rlcz0oIiRub2RlMV9pcCIgIiRub2RlMl9pcCIgIiRub2RlM19pcCIgIiRub2RlNF9pcCIpICAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gICAgICAgIAogICAgICAgIGlmICEgbG9hZF9ncHV0b3BvICIkbm9kZSIgIi93b3Jrc3BhY2UvemRzL21lc2hfNnBfMzIuanNvbiI7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBsb2FkIHRvcG8gZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgICMgI09DUy1TQ1JFRU4KICAgICMgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tb2NzX3NjcmVlbiBiZWZvcmUgbGlua3VwLS0tLSIgCiAgICAjIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCgogICAgI29uZXQgbGlua3VwCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMV9pcCAiNCIgJG5vZGUzX2lwICI0IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAKICAgIHNsZWVwIDIgIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTJfaXAgIjQiICRub2RlNF9pcCAiNCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgIAogICAgc2xlZXAgMiAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUxX2lwICI2IiAkbm9kZTRfaXAgIjYiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgIAogICAgc2xlZXAgMiAgCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMl9pcCAiNiIgJG5vZGUzX2lwICI2IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAgCiAgICBzbGVlcCAyIAoKICAgICNvbm9jIGxpbmt1cAogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAKICAgIHBvcnRzPSgyIDgpICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAKICAgICAgICBmb3IgcG9ydCBpbiAiJHtwb3J0c1tAXX0iOyBkbyAgICAgIAogICAgICAgICAgICBpZiAhIG9ub2NfbGlua3VwICRub2RlICRwb3J0OyB0aGVuCiAgICAgICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgb25vYyBsaW5rdXAgZmFpbDsgIgogICAgICAgICAgICAgICAgc2xlZXAgMgogICAgICAgICAgICBmaSAKICAgICAgICBkb25lICAgICAgIAogICAgZG9uZQoKICAgICNvY3Mtc2NyZWVuCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1zbGVlcCAxMHMgb2NzX3NjcmVlbiAtLS0tIgogICAgc2xlZXAgMTAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCiAgICBzbGVlcCA2CiAgICAjICNTTEVFUCA2MFMgb2NzLXNjcmVlbgogICAgIyBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1zbGVlcCA2MHMgb2NzX3NjcmVlbiAtLS0tIgogICAgIyBzbGVlcCA2MAogICAgIyAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQogICAgCiAgICAjIyMjcmVzdWx0IyMjICAgICAgICAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLSDmnKzova7mtYvor5Xnu5PmnpwgLS0tLSIKICAgIGlmIFsgIiRjdXJyZW50X3N1Y2Nl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iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICB0YXJnZXRfc3Rhcl9ub2RlPSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAtLXRlc3QpCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIHJ1bl9hbGw9ZmFsc2UKICAgICAgICAgICAgIyDlpITnkIYtLXRlc3TlkI7lpJrkuKrlj4LmlbAKICAgICAgICAgICAgd2hpbGUgW1sgJCMgLWd0IDAgJiYgISAiJDEiID1+IF4tLSBdXTsgZG8KICAgICAgICAgICAgICAgIGNhc2UgIiQxIiBpbgogICAgICAgICAgICAgICAgICAgIHJlc2V0X2dwdSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfZ3B1X2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIHNldF90b3BvKQogICAgICAgICAgICAgICAgICAgICAgICBzZXRfdG9wb19mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJrkuI3mlK/mjIHnmoTmtYvor5Xlj4LmlbAgJyQxJ++8jOS7heaUr+aMgSByZXNldF9ncHUg5oiWIHNldF90b3BvIgogICAgICAgICAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICLplJnor6/vvJrmnKrnn6Xlj4LmlbAgJyQxJ++8jOaUr+aMgeeahOWPguaVsO+8mi0tbm9kZSA857yW5Y+3PiAtLXRlc3QgW3Jlc2V0X2dwdXxzZXRfdG9wby4uLl0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyPliqDovb1KU09O6YWN572uIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg5qCh6aqM5L6d6LWW5ZKM6YWN572u5paH5Lu2CmlmICEgY29tbWFuZCAtdiBqcSAmPiAvZGV2L251bGw7IHRoZW4KICAgIGVjaG8gIumUmeivr++8muacquWuieijhSBqcSDlt6XlhbfvvIzor7flhYjmiafooYwgJ3l1bSBpbnN0YWxsIGpxIC15JyDmiJYgJ2FwdCBpbnN0YWxsIGpxIC15JyDlronoo4UiCiAgICBleGl0IDEKZmkKaWYgW1sgLXogIiR0YXJnZXRfc3Rhcl9ub2RlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5b+F6aG76YCa6L+HIC0tbm9kZSDmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgZXhpdCAxCmZpCmlmIFtbICEgLWYgIiRjb25maWdfZmlsZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tiAkY29uZmlnX2ZpbGUg5LiN5a2Y5Zyo77yM6K+35qOA5p+l6Lev5b6EIgogICAgZXhpdCAxCmZpCgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCiMg5qCh6aqM6YWN572u5a6M5pW05oCnCmlmIFtbICIkbm9kZTFfaXAiID09ICJudWxsIiB8fCAteiAiJG5vZGUxX2lwIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu25Lit5pyq5om+5YiwIHN0YXJfbm9kZT0kdGFyZ2V0X3N0YXJfbm9kZSDnmoTmnInmlYjphY3nva4iCiAgICBleGl0IDEKZmkKCkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy9uMThfb25vY19saW5rdXBfc3RyZXNzXyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VUR1BVIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9ncHUoKSB7ICAKICAgIGFjdGl2ZV9yZW1vdGUxPSQxCiAgICBncHVfY291bnQ9OAogICAgZWNobyAtZSAiXG4tLS0tLS06UkVTRVQgJGFjdGl2ZV9yZW1vdGUxIEdQVSAtLS0tLS0iID4mMgogICAgZm9yICgoaT0xOyBpPD0zOyBpKyspKTsgZG8KICAgICAgICByZXN0X2dwdT0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkYWN0aXZlX3JlbW90ZTEgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcImJyc21pIHJlc2V0IC1nXCIiJyAyPiYxKQogICAgICAgIGVjaG8gInJlc2V0ICRhY3RpdmVfcmVtb3RlMSBHUFU6IiA+JjIKICAgICAgICBlY2hvICIkcmVzdF9ncHUiID4mMiAgICAKICAgICAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJHJlc3RfZ3B1IiB8IGdyZXAgLWMgIkdQVVswLTddIFN1Y2Nlc3NlZC4iKQogICAgICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgc3VjY2VzcyIgPiYyCiAgICAgICAgICAgIGJyZWFrICAgICAgICAKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBmYWlsIiA+JjIgICAgICAgICAgICAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDIwCiAgICBkb25lCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkaXNhYmxlX2FsbF9sdHNzbSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlzYWJsZV9hbGxfbHRzc20oKSB7ICAgCiAgICBub2RlX2lwPSQxICAgIAogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVSBwb3J05piv5ZCm6YeN572u5oiQ5YqfCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19sb2NhbGdwdSIgfCBncmVwIC1jRSAnXkdQVSBbMC03XSwgSFdcW1swLTldK1xdOiBkaXNhYmxlIGx0c3NtIFwoMiwgNCwgNiwgOCwgMTBcKSBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgpkaXNhYmxlX3BvcnRfbHRzc20oKSB7CiAgICBub2RlX2lwPSQxCiAgICBub2RlX3BvcnQ9JDIKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBwb3J0JG5vZGVfcG9ydCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVeaYr+WQpumHjee9ruaIkOWKnyAgICAKICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2dwdXBvcnQiIHwgZ3JlcCAtYyAnSFdcW1swLTddXF06IGRpc2FibGUgbHRzc20gJyRub2RlX3BvcnQnIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VURVhQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9leHAoKSB7ICAgCiAgICBsb2NhbCBob3N0PSIkMSIKICAgIGxvY2FsIHBvcnQ9IiQyIiAgCiAgICBlY2hvICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgc2xlZXAgMwogICAgZWNobyAiY2hlayBFWFAgc3RhdC4uLiIKICAgIGV4cF9zdGF0ZT0kKCRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHN0YXQgMj4mMSkJCiAgICBlY2hvICJleHAgc3RhdGU6IgogICAgZWNobyAiJGV4cF9zdGF0ZSIgCiAgICB0aW1fc3dfdGltZT0kKGVjaG8gIiRleHBfc3RhdGUiIHwgZ3JlcCAiVElNX1NXOiIgfCBzZWQgLW4gJ3MvLipUSU1fU1c6IFwoW14sXSpcKS4qL1wxL3AnKQogICAgc2VjX3BhcnQ9JChlY2hvICIkdGltX3N3X3RpbWUiIHwgYXdrIC1GJzonICd7cHJpbnQgJE5GfScpCiAgICBzZWNvbmRzX3N0cj0kKGVjaG8gIiRzZWNfcGFydCIgfCB0ciAtZCAnXG4nIHwgZ3JlcCAtb0UgJ1swLTldKycgfCBoZWFkIC1uMSkKICAgIGlmIFtbICIkc2Vjb25kc19zdHIiID1+IF5bMC05XSskIF1dOyB0aGVuCiAgICAgICAgc2Vjb25kcz0kKCgxMCMkc2Vjb25kc19zdHIpKQogICAgZWxzZQogICAgICAgIGVjaG8gIuenkuaVsOagvOW8j+aXoOaViO+8iOaPkOWPluWAvDogWyRzZWNvbmRzX3N0cl0sIOinhuS4ukZBSUwiICAgICAgICAKICAgICAgICBjb250aW51ZQogICAgZmkKICAgICMg5Yik5pat57uT5p6cCiAgICBpZiBbICIkc2Vjb25kcyIgLWx0IDUgXTsgdGhlbiAgICAgICAgCiAgICAgICAgZWNobyAtZSAiRVhQIHJlc2V0IHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvICJUSU1fU1c6ICRzZWNvbmRzIHMsIEVYUCByZXNldCBGQUlMIiAKICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbj0iR1BVIEVYUCByZXNldCBGQUlMIiAKICAgICAgICByZXR1cm4gMgogICAgZmkKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjbG9hZCBncHUgdG9wbyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbG9hZF9ncHV0b3BvKCkgewogICAgbm9kZV9pcD0kMSAKICAgIGdwdV90b3BvPSQyCiAgICBlY2hvIC1lICJcbi0tLS1sb2FkLWdwdS10b3BvIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfNnBfMzIuanNvblwiIicKICAgICAgIAogICAgb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF82cF8zMi5qc29uXCIiJyAyPiYxKQogICAgc2xlZXAgMQogICAgZWNobyAibG9hZCB0b3BvIHJlc3VsdDoiCiAgICBlY2hvICIkb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICAjIGh3aWRfY291bnQ9OAogICAgIyBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgIyBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgIyAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICMgICAgIHJldHVybiAwIAogICAgIyBlbHNlCiAgICAjICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgIyAgICAgcmV0dXJuIDAgCiAgICAjIGZpIAp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNMSU5LVVAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm9uZXRfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZTFfaXA9JDEKICAgIGxvY2FsIG5vZGUxX3BvcnQ9JDIKICAgIGxvY2FsIG5vZGUyX2lwPSQzCiAgICBsb2NhbCBub2RlMl9wb3J0PSQ0ICAgCgogICAgZWNobyAtZSAiXG4tLS0tT05FVC0gTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgIAogICAgc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJyAmCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlMl9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKb25vY19saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlX2lwPSQxCiAgICBsb2NhbCBub2RlX3BvcnQ9JDIKCiAgICBlY2hvIC1lICJcbi0tLS1PTk9DLUxJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJwogICAgICAgICAgICAKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZV9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjR1BVU1BFRUQjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmdwdV9zcGVlZCgpIHsKICAgIGhvc3Q9JDEKICAgIHBvcnQ9JDIKCiAgICAjLS0tLS0tLS0tLS0gY2hlY2sgYWxsIEdQVSBwb3J0IGlzIEdFTjVYOCBvciBub3QtLS0tLS0tLS0tLS0tCiAgICBlY2hvIC1lICJcbi0tLS1PTkVUQS0gY2hlY2sgYWxsIEdQVSBwb3J0ICRwb3J0IGlzIEdFTjVYOCBvciBub3QgLS0tLSIgCiAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbyAgICAgICAKICAgICAgICBHRU41X3BhdHRlcm49IlBvcnQgJHBvcnQ6IEdFTjogNSwgV2lkdGg6IDgiCiAgICAgICAgZXhwZWN0ZWRfY291bnQ9OCAgICAgICAgCiAgICAgICAgbGluazFfZnVsbD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtY1wiIicpCiAgICAgICAgbGluazFfR0VOPSQoZWNobyAiJGxpbmsxX2Z1bGwiIHwgZ3JlcCAgIlBvcnQgJHBvcnQiIDI+JjEpIAogICAgICAgIGVjaG8gLWUgImxpbmsxOlxuICRsaW5rMV9HRU4iCiAgICAgICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfR0VOIiB8IGdyZXAgLWMgIiRHRU41X3BhdHRlcm4iIDI+JjEpCiAgICAgICAgZWNobyAibGluazEgZ2VuNSBjb3VudDogJGxpbmsxX2NvdW50IgkKICAgICAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGV4cGVjdGVkX2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IHN1Y2Nlc3MiCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbj0iUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgNgogICAgZG9uZQp9CgojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbyAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0g5Y6L5rWLbGlua3VwIOa1i+ivleesrCRpIOi9riA9PT09PT09PT09PT09PT0iCiAgICBlY2hvICAgIAogICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgIGZhaWxfcmVhc29uPSIiCiAgICAgICAgCiAgICAjIyMjIyMjIyMjI3NldCA0RyBUT1BPIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGlmIFsgIiRzZXRfdG9wb19mbGFnIiA9IHRydWUgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlxuPT09PT09IHNldCA0RyB0b29wID09PT09PSIKICAgICAgICBlY2hvCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgMiBvbm9jNSAmCiAgICAgICAgI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25vYzYgJgogICAgICAgICNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA4IG9ub2M2ICYKICAgICAgICB3YWl0CiAgICAgICAgZWNobyAgICAgICAgCiAgICBmaQoKICAgICNSRVNFVCA0RyBHUFUKICAgIGVjaG8gLWUgIlxuPT09PT09IHJlc2V0IDRHIEdQVSA9PT09PT0iCiAgICBpZiBbICIkcmVzZXRfZ3B1X2ZsYWciID0gdHJ1ZSBdOyB0aGVuICAgICAgICAKICAgICAgICBlY2hvCiAgICAgICAgZWNobyBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAKICAgICAgICAjYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwICYKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTJfaXAgJgogICAgICAgICNiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTNfaXAgJgogICAgICAgICNiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTRfaXAgJgogICAgICAgIHdhaXQKICAgICAgICBzbGVlcCAzCiAgICAgICAgZWNobwogICAgZmkKCiAgICAjZGlzYWJsZV9hbGxfbHRzc20KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLS0tIFJFU0VUICBHUFUgLS0tLS0tIgogICAgbm9kZXM9KCIkbm9kZTJfaXAiKSAgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvICAgICAgICAKICAgICAgICBpZiAhIGRpc2FibGVfYWxsX2x0c3NtICIkbm9kZSI7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBkaXNhYmxlIHBvcnQgZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgIHNsZWVwIDEKICAgIAogICAgI1JFU0VURVhQCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1yZXNldCBleHAgLS0tLSIgCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvZXhwX2NvbGRfcmVzZXQucHkgLS1ob3N0ICRibWNfaG9zdDIgLS1wb3J0IDIsOCkKICAgIHNsZWVwIDEKICAgIAogICAgI2xvYWRpbmcgR1BVIHRvcG8KICAgIG5vZGVzPSgiJG5vZGUyX2lwIikgICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAgICAgICAgCiAgICAgICAgaWYgISBsb2FkX2dwdXRvcG8gIiRub2RlIiAiL3dvcmtzcGFjZS96ZHMvbWVzaF82cF8zMi5qc29uIjsgdGhlbgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgR1BVIGxvYWQgdG9wbyBmYWlsIG9uIG5vZGUgJG5vZGU7ICIKICAgICAgICBmaSAgICAgICAgCiAgICBkb25lCgogICAgIyAjT0NTLVNDUkVFTgogICAgIyBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1vY3Nfc2NyZWVuIGJlZm9yZSBsaW5rdXAtLS0tIiAKICAgICMgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKCiAgICAjb25ldCBsaW5rdXAKICAgICNpZiAhIG9uZXRfbGlua3VwICRub2RlMV9pcCAiNCIgJG5vZGUzX2lwICI0IjsgdGhlbgogICAgIyAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICMgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgI2ZpICAKICAgICNzbGVlcCAyICAKICAgICNpZiAhIG9uZXRfbGlua3VwICRub2RlMl9pcCAiNCIgJG5vZGU0X2lwICI0IjsgdGhlbgogICAgIyAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICMgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgI2ZpICAgCiAgICAjc2xlZXAgMiAKICAgICNpZiAhIG9uZXRfbGlua3VwICRub2RlMV9pcCAiNiIgJG5vZGU0X2lwICI2IjsgdGhlbgogICAgIyAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICMgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgI2ZpICAKICAgICNzbGVlcCAyICAKICAgICNpZiAhIG9uZXRfbGlua3VwICRub2RlMl9pcCAiNiIgJG5vZGUzX2lwICI2IjsgdGhlbgogICAgIyAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICMgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgI2ZpICAgCiAgICAjc2xlZXAgMiAKCiAgICAjb25vYyBsaW5rdXAKICAgIG5vZGVzPSgiJG5vZGUyX2lwIikgCiAgICBwb3J0cz0oMiA4KSAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gCiAgICAgICAgZm9yIHBvcnQgaW4gIiR7cG9ydHNbQF19IjsgZG8gICAgICAKICAgICAgICAgICAgaWYgISBvbm9jX2xpbmt1cCAkbm9kZSAkcG9ydDsgdGhlbgogICAgICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IG9ub2MgbGlua3VwIGZhaWw7ICIKICAgICAgICAgICAgICAgIHNsZWVwIDIKICAgICAgICAgICAgZmkgCiAgICAgICAgZG9uZSAgICAgICAKICAgIGRvbmUKCiAgICAjb2NzLXNjcmVlbgogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgMTBzIG9jc19zY3JlZW4gLS0tLSIKICAgIHNsZWVwIDEwCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MiAtLXBvcnQgMiw4IC0tc2tpcCBlcnJvcikJCiAgICBzbGVlcCA2CiAgICAjICNTTEVFUCA2MFMgb2NzLXNjcmVlbgogICAgIyBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1zbGVlcCA2MHMgb2NzX3NjcmVlbiAtLS0tIgogICAgIyBzbGVlcCA2MAogICAgIyAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQogICAgCiAgICAjIyMjcmVzdWx0IyMjICAgICAgICAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLSDmnKzova7mtYvor5Xnu5PmnpwgLS0tLSIKICAgIGlmIFsgIiRjdXJyZW50X3N1Y2Nlc3MiID0gdHJ1ZSBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiXG7nrKwkaei9rua1i+ivleaIkOWKnyIKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJcbuesrCRp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ICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS10ZXN0KQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBydW5fYWxsPWZhbHNlCiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZSBbWyAkIyAtZ3QgMCAmJiAhICIkMSIgPX4gXi0tIF1dOyBkbwogICAgICAgICAgICAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG8pCiAgICAgICAgICAgICAgICAgICAgICAgIHNldF90b3BvX2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8muS4jeaUr+aMgeeahOa1i+ivleWPguaVsCAnJDEn77yM5LuF5pSv5oyBIHNldF90b3BvIgogICAgICAgICAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICLplJnor6/vvJrmnKrnn6Xlj4LmlbAgJyQxJ++8jOaUr+aMgeeahOWPguaVsO+8mi0tbm9kZSA857yW5Y+3PiAtLXRlc3QgW3Jlc2V0X2dwdXxzZXRfdG9wby4uLl0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgoKTE9HX0ZJTEU9ImxvZ3Mvc3VtbWFyeV9sb2dzL3N0cmVzcy00LTYtOF9saW5rc19vbmV0Yl9yZWNvdmVyeV9DTUlTLW1vbl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEdQVSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZ3B1KCkgeyAgCiAgICBhY3RpdmVfcmVtb3RlMT0kMQogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gLWUgIlxuLS0tLS0tOlJFU0VUICRhY3RpdmVfcmVtb3RlMSBHUFUgLS0tLS0tIiA+JjIKICAgIGZvciAoKGk9MTsgaTw9MzsgaSsrKSk7IGRvCiAgICAgICAgcmVzdF9ncHU9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJGFjdGl2ZV9yZW1vdGUxICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJicnNtaSByZXNldCAtZ1wiIicgMj4mMSkKICAgICAgICBlY2hvICJyZXNldCAkYWN0aXZlX3JlbW90ZTEgR1BVOiIgPiYyCiAgICAgICAgZWNobyAiJHJlc3RfZ3B1IiA+JjIgICAgCiAgICAgICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRyZXN0X2dwdSIgfCBncmVwIC1jICJHUFVbMC03XSBTdWNjZXNzZWQuIikKICAgICAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIHN1Y2Nlc3MiID4mMgogICAgICAgICAgICBicmVhayAgICAgICAgCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgZmFpbCIgPiYyCiAgICAgICAgICAgIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgMjAKICAgIGRvbmUKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGlzYWJsZV9hbGxfbHRzc20jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpc2FibGVfYWxsX2x0c3NtKCkgeyAgIAogICAgbm9kZV9pcD0kMSAgICAKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFUgcG9ydOaYr+WQpumHjee9ruaIkOWKnwogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfbG9jYWxncHUiIHwgZ3JlcCAtY0UgJ15HUFUgWzAtN10sIEhXXFtbMC05XStcXTogZGlzYWJsZSBsdHNzbSBcKDIsIDQsIDYsIDgsIDEwXCkgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKZGlzYWJsZV9wb3J0X2x0c3NtKCkgewogICAgbm9kZV9pcD0kMQogICAgbm9kZV9wb3J0PSQyCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgcG9ydCRub2RlX3BvcnQgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFXmmK/lkKbph43nva7miJDlip8gICAgCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19ncHVwb3J0IiB8IGdyZXAgLWMgJ0hXXFtbMC03XVxdOiBkaXNhYmxlIGx0c3NtICckbm9kZV9wb3J0JyBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEVYUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZXhwKCkgeyAgIAogICAgbG9jYWwgaG9zdD0iJDEiCiAgICBsb2NhbCBwb3J0PSIkMiIgIAogICAgZWNobyAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgIHNsZWVwIDMKICAgIGVjaG8gImNoZWsgRVhQIHN0YXQuLi4iCiAgICBleHBfc3RhdGU9JCgkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCBzdGF0IDI+JjEpCQogICAgZWNobyAiZXhwIHN0YXRlOiIKICAgIGVjaG8gIiRleHBfc3RhdGUiIAogICAgdGltX3N3X3RpbWU9JChlY2hvICIkZXhwX3N0YXRlIiB8IGdyZXAgIlRJTV9TVzoiIHwgc2VkIC1uICdzLy4qVElNX1NXOiBcKFteLF0qXCkuKi9cMS9wJykKICAgIHNlY19wYXJ0PSQoZWNobyAiJHRpbV9zd190aW1lIiB8IGF3ayAtRic6JyAne3ByaW50ICRORn0nKQogICAgc2Vjb25kc19zdHI9JChlY2hvICIkc2VjX3BhcnQiIHwgdHIgLWQgJ1xuJyB8IGdyZXAgLW9FICdbMC05XSsnIHwgaGVhZCAtbjEpCiAgICBpZiBbWyAiJHNlY29uZHNfc3RyIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIHNlY29uZHM9JCgoMTAjJHNlY29uZHNfc3RyKSkKICAgIGVsc2UKICAgICAgICBlY2hvICLnp5LmlbDmoLzlvI/ml6DmlYjvvIjmj5Dlj5blgLw6IFskc2Vjb25kc19zdHJdLCDop4bkuLpGQUlMIiAgICAgICAgCiAgICAgICAgY29udGludWUKICAgIGZpCiAgICAjIOWIpOaWree7k+aenAogICAgaWYgWyAiJHNlY29uZHMiIC1sdCA1IF07IHRoZW4gICAgICAgIAogICAgICAgIGVjaG8gLWUgIkVYUCByZXNldCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAiVElNX1NXOiAkc2Vjb25kcyBzLCBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb249IkdQVSBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgcmV0dXJuIDIKICAgIGZpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2xvYWQgQkwtMTYgdG9wbyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbG9hZF9ibDE2X3RvcG8oKSB7CiAgICBub2RlX2lwPSQxICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLWxvYWQtZ3B1LXRvcG8gLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF83cC5qc29uXCIiJwogICAgICAgCiAgICBvdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzdwLmpzb25cIiInIDI+JjEpCiAgICBzbGVlcCAxCiAgICBlY2hvICJsb2FkIHRvcG8gcmVzdWx0OiIKICAgIGVjaG8gIiRvdXRwdXQiICAgIAp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0xJTktVUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKb25ldF9saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlMV9pcD0kMQogICAgbG9jYWwgbm9kZTFfcG9ydD0kMgogICAgbG9jYWwgbm9kZTJfaXA9JDMKICAgIGxvY2FsIG5vZGUyX3BvcnQ9JDQgICAKCiAgICBlY2hvIC1lICJcbi0tLS1PTkVULSBMSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJwogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgCiAgICBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInICYKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGUyX3BvcnRcXTogUmVhZHkiKSAgICAKICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkaHdpZF9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMCAKICAgIGVsc2UKICAgICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgICAgIHJldHVybiAwIAogICAgZmkgCgogICAgc2xlZXAgMQp9Cgpvbm9jX2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGVfaXA9JDEKICAgIGxvY2FsIG5vZGVfcG9ydD0kMgoKICAgIGVjaG8gLWUgIlxuLS0tLU9OT0MtTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInCiAgICAgICAgICAgIAogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlX3BvcnRcXTogUmVhZHkiKSAgICAKICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkaHdpZF9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMCAKICAgIGVsc2UKICAgICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgICAgIHJldHVybiAwIAogICAgZmkgCgogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNHUFVTUEVFRCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZ3B1X3NwZWVkKCkgewogICAgaG9zdD0kMQogICAgcG9ydD0kMgoKICAgICMtLS0tLS0tLS0tLSBjaGVjayBhbGwgR1BVIHBvcnQgaXMgR0VONVg4IG9yIG5vdC0tLS0tLS0tLS0tLS0KICAgIGVjaG8gLWUgIlxuLS0tLU9ORVRBLSBjaGVjayBhbGwgR1BVIHBvcnQgJHBvcnQgaXMgR0VONVg4IG9yIG5vdCAtLS0tIiAKICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvICAgICAgIAogICAgICAgIEdFTjVfcGF0dGVybj0iUG9ydCAkcG9ydDogR0VOOiA1LCBXaWR0aDogOCIKICAgICAgICBleHBlY3RlZF9jb3VudD04ICAgICAgICAKICAgICAgICBsaW5rMV9mdWxsPSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1jXCIiJykKICAgICAgICBsaW5rMV9HRU49JChlY2hvICIkbGluazFfZnVsbCIgfCBncmVwICAiUG9ydCAkcG9ydCIgMj4mMSkgCiAgICAgICAgZWNobyAtZSAibGluazE6XG4gJGxpbmsxX0dFTiIKICAgICAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9HRU4iIHwgZ3JlcCAtYyAiJEdFTjVfcGF0dGVybiIgMj4mMSkKICAgICAgICBlY2hvICJsaW5rMSBnZW41IGNvdW50OiAkbGluazFfY291bnQiCQogICAgICAgIGlmIFsgJGxpbmsxX2NvdW50IC1lcSAkZXhwZWN0ZWRfY291bnQgXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggc3VjY2VzcyIKICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgICAgICAgICAgYnJlYWsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uPSJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCA2CiAgICBkb25lCn0KCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZm9yICgoaT0xOyBpPD0kbG9vcF90aW1lczsgaSsrKSk7IGRvICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSDljovmtYtsaW5rdXAg5rWL6K+V56ysJGkg6L2uID09PT09PT09PT09PT09PSIKICAgIGVjaG8gICAgCiAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgZmFpbF9yZWFzb249IiIKICAgIAogICAgIyMjIyMjIyMjIyNzZXQgNEcgVE9QTyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBpZiBbICIkc2V0X3RvcG9fZmxhZyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbj09PT09PSBzZXQgNEcgdG9vcCA9PT09PT0iCiAgICAgICAgZWNobwogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDQgb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDYgb25vYzcgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDggb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDYgb25vYzcgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDggb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDQgb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDYgb25vYzcgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDggb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDQgb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDYgb25vYzcgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDggb25ldGEgJgogICAgICAgIHdhaXQKICAgICAgICBlY2hvICAgICAgICAKICAgIGZpCgogICAgI1JFU0VUIDRHIEdQVQogICAgZWNobyAtZSAiXG49PT09PT0gcmVzZXQgNEcgR1BVID09PT09PSIKICAgIGVjaG8KICAgIGVjaG8gYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwCiAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAgJgogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUyX2lwICYKICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlM19pcCAmCiAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTRfaXAgJgogICAgd2FpdAogICAgc2xlZXAgMwogICAgZWNobwoKICAgICNSRVNFVEVYUAogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tcmVzZXQgZXhwIC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL2V4cF9jb2xkX3Jlc2V0LnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4KQogICAgc2xlZXAgMQogCiAgICAjT0NTLVNDUkVFTgogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tb2NzX3NjcmVlbiBiZWZvcmUgbGlua3VwLS0tLSIgCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQoKICAgICNvbmV0IGxpbmt1cAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjgiICRub2RlMl9pcCAiOCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBvbmV0IHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAKICAgIHNsZWVwIDIgIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTNfaXAgIjgiICRub2RlNF9pcCAiOCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBvbmV0IHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAgCiAgICBzbGVlcCAyIAogICAgCiAgICAjb25vYyBsaW5rdXAKICAgIG5vZGVzPSgiJG5vZGUxX2lwIiAiJG5vZGUyX2lwIiAiJG5vZGUzX2lwIiAiJG5vZGU0X2lwIikgCiAgICBwb3J0cz0oMiA0IDYpICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAKICAgICAgICBmb3IgcG9ydCBpbiAiJHtwb3J0c1tAXX0iOyBkbyAgICAgIAogICAgICAgICAgICBpZiAhIG9ub2NfbGlua3VwICRub2RlICRwb3J0OyB0aGVuCiAgICAgICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgb25vYyBsaW5rdXAgZmFpbDsgIgogICAgICAgICAgICBmaSAKICAgICAgICBkb25lICAgICAgIAogICAgZG9uZQoKICAgICNvY3Mtc2NyZWVuCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1zbGVlcCAxMHMgb2NzX3NjcmVlbiAtLS0tIgogICAgc2xlZXAgMTAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MiwkYm1jX2hvc3QyIC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCiAgICBzbGVlcCA2CiAgICAjU0xFRVAgNjBTIG9jcy1zY3JlZW4KICAgICMgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgNjBzIG9jc19zY3JlZW4gLS0tLSIKICAgICMgc2xlZXAgNjAKICAgICMgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QyLCRibWNfaG9zdDIgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKICAgIAogICAgIyMjI3Jlc3VsdCMjIyAgICAgICAgCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS0g5pys6L2u5rWL6K+V57uT5p6cIC0tLS0iCiAgICBpZiBbICIkY3VycmVudF9zdWNjZXNzIiA9IHRydWUgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlxu56ysJGnova7mtYvor5XmiJDlip8iCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiXG7nrKwkaei9rua1i+ivlUZBSUw6ICRmYWlsX3JlYXNvbiIKICAgIGZpCiAgICAKZG9uZQoKIyDorrDlvZXnu5PmnZ/ml7bp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NTAiLAogICAgIm5vZGUzX2JtYyI6ICIxMC41Ny4yMTYuOTciLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xODUiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuOTgiCiAgfSwKICAiOSI6IHsKICAgICJub2RlMV9pcCI6ICIxMC41Ny4yMTYuMTgwIiwKICAgICJub2RlMV9ibWMiOiAiMTAuNTcuMjE2Ljk5IiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTc2IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwMCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjE0NSIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDEiLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xMzQiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuMTAyIgogIH0sCiAgIjEzIjogewogICAgIm5vZGUxX2lwIjogIjEwLjU3LjIxNi4xNTciLAogICAgIm5vZGUxX2JtYyI6ICIxMC41Ny4yMTYuMTAzIiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTg4IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwNCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjE1NiIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDUiLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xNTEiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuMTA2IgogIH0sCiAgIjE3IjogewogICAgIm5vZGUxX2lwIjogIjEwLjU3LjIxNi4xNjciLAogICAgIm5vZGUxX2JtYyI6ICIxMC41Ny4yMTYuMTA3IiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTc3IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwOCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjEzOSIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDkiLAogICAgIm5vZGU0X2lwIjogIjEw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5Li65Y2V5Liq56m65qC877yM6KGl5YWo5Y+v6IO95pat6KOC55qE5a2X5q6177yI5aaCIFRFTVAg6KKr5ouG5YiG77yJCiAgICBjbWlzX21vbl9zdHIgPSByZS5zdWIocidccysnLCAnICcsIGNtaXNfbW9uX3N0cikuc3RyaXAoKQogICAgIyDpop3lpJblpITnkIbvvJrnoa7kv50gQ01JUyDlhbPplK7lrZflkI7ntKfot5/mlbDlrZfvvIjpgb/lhY3lrZfmrrXnspjov57vvIkKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NNSVMoXGQrKScsIHInQ01JUyBcMScsIGNtaXNfbW9uX3N0cikKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NIKFxkKyknLCByJ0NIIFwxJywgY21pc19tb25fc3RyKQoKICAgIHBhdHRlcm5zID0ge30KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5rip5bqm5qih5byP77ya5YW85a655a2X5q615L+u5aSN5ZCO55qE5qC85byPIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X3RlbXAiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgIHJmIkNNSVMge2NtaXNfbnVtfSBURU1QOiAoWystXT9cZCsoXC5cZCspPykgQyIsCiAgICAgICAgICAgIHJlLklHTk9SRUNBU0UKICAgICAgICApCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tIOmAmumBk+WPguaVsOaooeW8j++8muS/neaMgeeLrOeri+WMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICByZiJDTUlTIHtjbWlzX251bX0gQ0gge2NoX251bX06ICguKj8pKD89IENNSVMgfCQpIiwgICMg5rOo5oSPIENIIOWQjuWKoOepuuagvO+8iOS/ruWkjeWQjuagvOW8j++8iQogICAgICAgICAgICAgICAgcmUuRE9UQUxMIHwgcmUuSUdOT1JFQ0FTRQogICAgICAgICAgICApCiAgICAgICAgICAgIHBhdHRlcm5zW2YiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV90eCJdID0gcmUuY29tcGlsZShyIlRYIChbKy1dP1xkKyhcLlxkKyk/KSBkQm0iLCByZS5JR05PUkVDQVNFKQogICAgICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1faWJpYXMiXSA9IHJlLmNvbXBpbGUociJJQklBUyAoWystXT9cZCsoXC5cZCspPykgbUEiLCByZS5JR05PUkVDQVNFKQogICAgCiAgICByZXN1bHQgPSB7fQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLSDmj5Dlj5bmuKnluqbvvIjluKbosIPor5Xml6Xlv5fvvIkgLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIHRlbXBfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV90ZW1wIgogICAgICAgIHRlbXBfbWF0Y2ggPSBwYXR0ZXJuc1t0ZW1wX2tleV0uc2VhcmNoKGNtaXNfbW9uX3N0cikKICAgICAgICByZXN1bHRbdGVtcF9rZXldID0gdGVtcF9tYXRjaC5ncm91cCgxKSBpZiB0ZW1wX21hdGNoIGVsc2UgTm9uZQogICAgICAgIGlmIHJlc3VsdFt0ZW1wX2tleV06CiAgICAgICAgICAgIHByaW50KGYi5oiQ5Yqf5Yy56YWNIENNSVMge2NtaXNfbnVtfSBURU1QOiB7cmVzdWx0W3RlbXBfa2V5XX0gQyIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RhcnRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bX0iKQogICAgICAgICAgICBlbmRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bSsxfSIpIGlmIGNtaXNfbnVtIDwgOCBlbHNlIGxlbihjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIHRhcmdldF9ibG9jayA9IGNtaXNfbW9uX3N0cltzdGFydF9pZHg6ZW5kX2lkeF0uc3RyaXAoKQogICAgICAgICAgICBwcmludChmIuitpuWRiu+8muacquWMuemFjeWIsCBDTUlTIHtjbWlzX251bX0gVEVNUO+8jOW9k+WJjeWMuuWdl+WGheWuue+8mnt0YXJnZXRfYmxvY2t9IikKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5o+Q5Y+W6YCa6YGT5Y+C5pWwIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIHJ4X2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9SWCIKICAgICAgICAgICAgaWJpYXNfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xhc2VyX2liaWFzIgoKICAgICAgICAgICAgbGluZV9wYXR0ZXJuID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXQogICAgICAgICAgICBsaW5lX21hdGNoID0gbGluZV9wYXR0ZXJuLnNlYXJjaChjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lX21hdGNoOgogICAgICAgICAgICAgICAgcmVzdWx0W3R4X2tleV0gPSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IE5vbmUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGxpbmVfY29udGVudCA9IGxpbmVfbWF0Y2guZ3JvdXAoMSkKICAgICAgICAgICAgICAgIHR4X21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X3R4Il0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIGliaWFzX21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2liaWFzIl0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIHJlc3VsdFt0eF9rZXldID0gdHhfbWF0Y2guZ3JvdXAoMSkgaWYgdHhfbWF0Y2ggZWxzZSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IGliaWFzX21hdGNoLmdyb3VwKDEpIGlmIGliaWFzX21hdGNoIGVsc2UgTm9uZQogICAgICAgICAgICByZXN1bHRbcnhfa2V5XSA9IE5vbmUKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIHBhcnNlX3Jzc2lfZGF0YShyc3NpX3N0cik6CiAgICAiIiIKICAgIOino+aekCBSU1NJIOaWh+acrOaVsOaNru+8jOeUn+aIkCBDTUlTIDF+OCDlkIQgQ0gxfjgg55qEIFJYIOaYoOWwhOWtl+WFuAogICAg5Y+C5pWw77yacnNzaV9zdHIgLSDljIXlkKsgb2NzMX5vY3M4IOaVsOaNrueahOaWh+acrOWtl+espuS4sgogICAg6L+U5Zue77yacnNzaV9kaWN0IC0ge2NtaXNfbnVtOiBbQ0gxX1JYLCBDSDJfUlgsIC4uLiwgQ0g4X1JYXSwgLi4ufe+8iGNtaXNfbnVtIDF+OO+8iQogICAgIiIiCiAgICByc3NpX2RpY3QgPSB7Y21pc19udW06IFtOb25lIGZvciBfIGluIHJhbmdlKDgpXSBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSl9CiAgICByc3NpX2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiByc3NpX3N0ci5zcGxpdCgiXG4iKSBpZiBsaW5lLnN0cmlwKCldCiAgICAKICAgIGZvciBsaW5lIGluIHJzc2lfbGluZXM6CiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tIOWFs+mUruS/ruWkje+8muWMuemFjeaWueaLrOWPt+WMheijueeahOaVsOWAvCArIOS8mOWMluWMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAxLiBcWzog5Yy56YWNIFJTU0lfREJNIOWQjueahOW3puaLrOWPtwoKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgKICAgICAgICAgICAgciIuKj9vY3MoXGQrKVwuW146XSs6Lio/UlNTSV9EQk06XHMqXFtccyooWystXT9cZCtcLlxkKyg/OlxzKixccypbKy1dP1xkK1wuXGQrKSopXHMqXF0iLAogICAgICAgICAgICBsaW5lCiAgICAgICAgKQogICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgIyDlv73nlaUgTmFtZXNwYWNlIOihjO+8iOato+W4uOeOsOixoe+8ie+8jOWFtuS7luacquWMuemFjeihjOaJjeaJk+WNsAogICAgICAgICAgICBpZiAiTmFtZXNwYWNlIiBub3QgaW4gbGluZToKICAgICAgICAgICAgICAgIHByaW50KGYi5pyq5Yy56YWN55qEUlNTSeihjO+8mntsaW5lfSIpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgY21pc19udW0gPSBpbnQobWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgaWYgY21pc19udW0gPCAxIG9yIGNtaXNfbnVtID4gODoKICAgICAgICAgICAgY29udGludWUKICAgICAgICAKICAgICAgICAjIOaMieOAjOmAl+WPtyvnqbrmoLzjgI3liIblibLmlbDlgLzvvIjlhbzlrrnnuq/pgJflj7cv5aSa56m65qC877yJCiAgICAgICAgcnNzaV9kYm1fbGlzdCA9IHJlLnNwbGl0KHIiXHMqLFxzKiIsIG1hdGNoLmdyb3VwKDIpKQogICAgICAgICMg56Gu5L+d5Y+q5Y+W5YmNOOS4qumAmumBk++8iOmYsuatouaVsOaNruW8guW4uO+8iQogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UobWluKDgsIGxlbihyc3NpX2RibV9saXN0KSkpOgogICAgICAgICAgICByc3NpX2RpY3RbY21pc19udW1dW2NoX2lkeF0gPSByc3NpX2RibV9saXN0W2NoX2lkeF0KICAgIAogICAgcmV0dXJuIHJzc2lfZGljdAoKZGVmIG1haW4oKToKCiAgICAjIDEuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWfuuehgOWPguaVsO+8iOWOn+mAu+i+keS/neeVme+8iQogICAgY3N2X2ZpbGUgPSBvcy5nZXRlbnYoIkNTVl9GSUxFIiwgIiIpICAgIAogICAgbG9vcCA9IG9zLmdldGVudigiTE9PUCIsICIiKSAgICAKICAgIGFjdGl2ZV9wb3J0ID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVCIsICIiKSAgIAogICAgY3Jvc3NfcG9ydCA9IG9zLmdldGVudigiQ1JPU1NfUE9SVCIsICIiKQogICAgCiAgICAjIDIuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWQhOerr+WPo+eahCBDTUlTIOebkeaOp+aVsOaNru+8iOWOn+mAu+i+keS/neeVme+8iQogICAgYWN0aXZlX3BvcnRfY21pcyA9IG9zLmdldGVudigiQUNUSVZFX1BPUlRfQ01JUyIsICIiKQogICAgY3Jvc3NfcG9ydF9jbWlzID0gb3MuZ2V0ZW52KCJDUk9TU19QT1JUX0NNSVMiLCAiIikKCiAgICAKICAgICMgMy4g5LuO546v5aKD5Y+Y6YeP6K+75Y+W5ZCE56uv5Y+j55qEIFJTU0kg5pWw5o2u77yI55So5LqO5o+Q5Y+WIFJY77yJCiAgICBhY3RpdmVfcG9ydF9yc3NpID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVF9SU1NJIiwgIiIpICAKICAgIGNyb3NzX3BvcnRfcnNzaSA9IG9zLmdldGVudigiQ1JPU1NfUE9SVF9SU1NJIiwgIiIpCiAgIAoKICAgICMgNC4g5o+Q5Y+W5ZCE56uv5Y+j5Z+656GA5Y+C5pWw77yIVFgvSUJJQVMv5rip5bqm77yJCiAgICBwcmludChmImJyMV9wNCDnmoQgY21pcyDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9jbWlzfSIpCiAgICBhY3RpdmVfcG9ydF9wYXJhbXMgPSBleHRyYWN0X2NtaXNfcGFyYW1zKGFjdGl2ZV9wb3J0X2NtaXMpCiAgICBwcmludChmImJyMV9wNCDnmoQgY21pcyDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9wYXJhbXN9IikKICAgIGNyb3NzX3BvcnRfcGFyYW1zID0gZXh0cmFjdF9jbWlzX3BhcmFtcyhjcm9zc19wb3J0X2NtaXMpCgoKICAgICMgNS4g6Kej5p6Q5ZCE56uv5Y+jIFJTU0kg5pWw5o2u77yM6KaG55uWIFJYIOWAvAogICAgIyA1LjEg5aSE55CGIGFjdGl2ZV9wb3J0CiAgICBwcmludChmImJyMV9wNCDnmoQgUlNTSSDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9yc3NpfSIpCiAgICBhY3RpdmVfcG9ydF9yc3NpX2RpY3QgPSBwYXJzZV9yc3NpX2RhdGEoYWN0aXZlX3BvcnRfcnNzaSkKICAgIHByaW50KGYiYnIxX3A0IOeahCBSU1NJIOino+aekOe7k+aenO+8mlxue2FjdGl2ZV9wb3J0X3Jzc2lfZGljdH0iKQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UoOCk6CiAgICAgICAgICAgIGNoX251bSA9IGNoX2lkeCArIDEKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICBhY3RpdmVfcG9ydF9wYXJhbXNbcnhfa2V5XSA9IGFjdGl2ZV9wb3J0X3Jzc2lfZGljdFtjbWlzX251bV1bY2hfaWR4XQogICAgCiAgICAjIDUuMiDlpITnkIYgY3Jvc3NfcG9ydAogICAgcHJpbnQoZiJjcm9zc19wb3J0IOeahCBSU1NJIOino+aekOe7k+aenO+8mlxue2Nyb3NzX3BvcnRfcnNzaX0iKQogICAgY3Jvc3NfcG9ydF9yc3NpX2RpY3QgPSBwYXJzZV9yc3NpX2RhdGEoY3Jvc3NfcG9ydF9yc3NpKQogICAgcHJpbnQoZiJicjFfcDYg55qEIFJTU0kg6Kej5p6Q57uT5p6c77yaXG57Y3Jvc3NfcG9ydF9yc3NpX2RpY3R9IikKICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfaWR4IGluIHJhbmdlKDgpOgogICAgICAgICAgICBjaF9udW0gPSBjaF9pZHggKyAxCiAgICAgICAgICAgIHJ4X2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9SWCIKICAgICAgICAgICAgY3Jvc3NfcG9ydF9wYXJhbXNbcnhfa2V5XSA9IGNyb3NzX3BvcnRfcnNzaV9kaWN0W2NtaXNfbnVtXVtjaF9pZHhdCiAgICAKICAgIAogICAgIyA2LiDnu4Too4XmlbDmja7ooYzvvIjljp/pgLvovpHkv53nlZnvvIkKICAgIHJvd3MgPSBbXQogICAgcG9ydHMgPSBbCiAgICAgICAgKGFjdGl2ZV9wb3J0LCBhY3RpdmVfcG9ydF9wYXJhbXMpLAogICAgICAgICMoY3Jvc3NfcG9ydCwgY3Jvc3NfcG9ydF9wYXJhbXMpCiAgICBdCiAgICBuZXdfaGVhZGVyID0gWyJBQ1RJVkVfUE9SVCIsICJPQ1NfVE9QTyIsICJDUk9TU19QT1JUIiwgIk9DUyIsICJsYW5lIiwgImNyb3NzX3RlbXAiLCAiY3Jvc3NfUlgiLCAiY3Jvc3NfVFgiLCAiY3Jvc3NfaWJpYXMiLCAiYXZ0aXZlX3RlbXAiLCAiYXZ0aXZlX1JYIiwgImF2dGl2ZV9UWCIsICJhdnRpdmVfaWJpYXMiXQoKCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgY3Jvc3NfdGVtcF92YWwgPSBjcm9zc19wb3J0X3BhcmFtcy5nZXQoZiJjbWlze2NtaXNfbnVtfV90ZW1wIikKICAgICAgICBhY3RpdmVfdGVtcF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KGYiY21pc3tjbWlzX251bX1fdGVtcCIpCiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIGliaWFzX2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9sYXNlcl9pYmlhcyIKICAgICAgICAgICAgCiAgICAgICAgICAgIGNyb3NzX3J4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGNyb3NzX3R4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldCh0eF9rZXkpCiAgICAgICAgICAgIGNyb3NzX2liaWFzX3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChpYmlhc19rZXkpCiAgICAgICAgICAgIAogICAgICAgICAgICBhY3RpdmVfcnhfdmFsID0gYWN0aXZlX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGFjdGl2ZV90eF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KHR4X2tleSkKICAgICAgICAgICAgYWN0aXZlX2liaWFzX3ZhbCA9IGFjdGl2ZV9wb3J0X3BhcmFtcy5nZXQoaWJpYXNfa2V5KQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIGNyb3NzX3J4X3ZhbCBvciBjcm9zc190eF92YWwgb3IgY3Jvc3NfaWJpYXNfdmFsOgogICAgICAgICAgICAgICAgcm93ID0geyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAiQUNUSVZFX1BPUlQiOiBhY3RpdmVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgIk9DU19UT1BPIjogbG9vcCwgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAiQ1JPU1NfUE9SVCI6IGNyb3NzX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICJPQ1MiOiBjbWlzX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgImxhbmUiOiBjaF9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICJjcm9zc190ZW1wIjogY3Jvc3NfdGVtcF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJjcm9zc19SWCI6IGNyb3NzX3J4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImNyb3NzX1RYIjogY3Jvc3NfdHhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3NfaWJpYXMiOiBjcm9zc19pYmlhc192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJhdnRpdmVfdGVtcCI6IGFjdGl2ZV90ZW1wX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImF2dGl2ZV9SWCI6IGFjdGl2ZV9yeF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJhdnRpdmVfVFgiOiBhY3RpdmVfdHhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiYXZ0aXZlX2liaWFzIjogYWN0aXZlX2liaWFzX3ZhbAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIDcuIOWGmeWFpSBDU1bvvIjljp/pgLvovpHkv53nlZnvvIkKICAgIGlmIHJvd3M6CiAgICAgICAgZGYgPSBwZC5EYXRhRnJhbWUocm93cywgY29sdW1ucz1uZXdfaGVhZGVyKQogICAgICAgIHdyaXRlX2hlYWRlciA9IG5vdCBvcy5wYXRoLmV4aXN0cyhjc3ZfZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKGNzdl9maWxlKSA9PSAwCiAgICAgICAgZGYudG9fY3N2KAogICAgICAgICAgICBjc3ZfZmlsZSwKICAgICAgICAgICAgbW9kZT0iYSIsCiAgICAgICAgICAgIGhlYWRlcj13cml0ZV9oZWFkZXIsCiAgICAgICAgICAgIGluZGV4PUZhbHNlLAogICAgICAgICAgICBlbmNvZGluZz0idXRmLTgiCiAgICAgICAgKQogICAgICAgIHByaW50KGYi5pWw5o2u5bey5YaZ5YWlIHtjc3ZfZmlsZX3vvIhhY3RpdmVfcG9ydDp7YWN0aXZlX3BvcnR977yJIikKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoZiLmnKrmj5Dlj5bliLDku7vkvZUgQ01JUyDpgJrpgZPmlbDmja7vvIhhY3RpdmVfcG9ydDp7YWN0aXZlX3BvcnR9LO+8iSIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b195ZC82NF94ei1kYXJrX2N1cnJlbnRfZmlsdGVyLnNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1MAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMTc0NDcAMTUxMjA1MTE3MzcAMDE2MjQzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL2Jpbi9iYXNoCgojIGNvbmZpZ3VyZQpyb290X3VzZXI9InJvb3QiCnJvb3RfcHNzd2Q9IlJDbXNAWnRlMyIKcmVtb3RlX3VzZXI9InBpY3QiCnJlbW90ZV9wc3N3ZD0iUGljVDEhMkAzIzQkIgpleHBfdG9vbD0iLi9zbWJ1cy10b29sL2J1aWxkL3doaXRlcml2ZXJfZXhwLmV4ZSIKd2FpdF90aW1lPTEwCmxvb3BfdGltZXM9MQoKcmVzZXRfZ3B1X2ZsYWc9ZmFsc2UKc2V0X3RvcG9fZmxhZz1mYWxzZQpydW5fYWxsPXRydWUgCgpjb25maWdfZmlsZT0ibm9kZV9jb25maWdzLmpzb24iICAKdGFyZ2V0X3N0YXJfbm9kZT0iIgpub2RlMV9pcD0iIgpub2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCgpjb2xsZWN0X29ub2NfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSIkMSIKICAgIGxvY2FsIGFjdGl2ZV9ibWNpcD0iJHshYWN0aXZlX2JtY30iICAKICAgIGxvY2FsIF9hY3RpdmVfbm9kZT0iJHthY3RpdmVfYm1jJV9ibWN9IgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDIKICAgIGxvY2FsIGNyb3NzX2JtYz0kMwogICAgbG9jYWwgY3Jvc3NfYm1jaXA9IiR7IWNyb3NzX2JtY30iICAKICAgIGxvY2FsIF9jcm9zc19ub2RlPSIke2Nyb3NzX2JtYyVfYm1jfSIKICAgIGxvY2FsIGNyb3NzX3BvcnQ9JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jaXAiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWNpcCIKCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2FjdGl2ZV9ub2RlICRzdGFyX25vZGUpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoY29udmVydF9ub2RlICRfY3Jvc3Nfbm9kZSAkc3Rhcl9ub2RlKQogIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgICNsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHggLS1vY3MgJG9jcyIKICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAgCiAgICAjZGlzYWJsZSBvY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZQogICAgCiAgICBlY2hvIC1lICJcbndhaXQgMTBzLCBvY3Mgc3RhYmxlLi4uIgogICAgc2xlZXAgMTAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgZGF0YSAtLS0tLSIKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRhY3RpdmVfYm1jaXAgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jaXAgLWUgJGNyb3NzX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfY21pcyAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9jbWlzIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgIHNsZWVwIDIKICAgIGxvY2FsIGNyb3NzX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IDI+JjEpCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKQogICAgICAgICAgICAKICAgICMg6LCD6K+V6L6T5Ye677yI5oyJ6ZyA5byA5ZCv77yJCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9yc3NpICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9yc3NpIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X3Jzc2kgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfcnNzaSIKICAgICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLSDosIPnlKggUHl0aG9uIOWIhuaekCAkYWN0aXZlX3BvcnQg5pWw5o2uIC0tLS0iICAgIAogICAgZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCiAgICBleHBvcnQgTE9PUD0iJGkiCiAgICBleHBvcnQgQUNUSVZFX1BPUlQ9IiRhY3RpdmVfbm9kZS1QJGFjdGl2ZV9wb3J0IiAKICAgIGV4cG9ydCBDUk9TU19QT1JUPSIkY3Jvc3Nfbm9kZS1QJGNyb3NzX3BvcnQiCiAgICBleHBvcnQgQUNUSVZFX1BPUlRfUlNTST0iJGFjdGl2ZV9wb3J0X3Jzc2kiIEFDVElWRV9QT1JUX0NNSVM9IiRhY3RpdmVfcG9ydF9jbWlzIiAKICAgIGV4cG9ydCBDUk9TU19QT1JUX1JTU0k9IiRjcm9zc19wb3J0X3Jzc2kiIENST1NTX1BPUlRfQ01JUz0iJGNyb3NzX3BvcnRfY21pcyIKCiAgICBweXRob24zIGNvbGxlY3RfdGVzdF9kYXRhX29ub2NfcnNzaS5weSAKICAgIAogICAgdW5zZXQgQ1NWX0ZJTEUgTE9PUCBBQ1RJVkVfQk1DIEFDVElWRV9QT1JUIENST1NTX0JNQyBDUk9TU19QT1JUCiAgICB1bnNldCBBQ1RJVkVfUE9SVF9SU1NJIEFDVElWRV9QT1JUX0NNSVMgQ1JPU1NfUE9SVF9SU1NJIENST1NTX1BPUlRfQ01JUyAgICAKCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0kYWN0aXZlX2JtYyBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IOaVsOaNruWkhOeQhuWujOaIkCA9PT09PT09PT09PT09PT1cbiIKICAgIHNsZWVwIDIgIAp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKY3N2X2ZpbGU9ImNzdl9kYXRhLzYyX3N0cmVzc18xMy0xNi1vbm9jX2NoZWNrX29jc3Bvd2VyXyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgoKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZGVidWdfbW9kZT0xCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8KICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09IOesrCAkaSDova7lvqrnjq8gPT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgoKICAgICNwb3J0IDgKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgOCBub2RlMl9ibWMgOCAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUyX2JtYyA4IG5vZGUxX2JtYyA4CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTNfYm1jIDggbm9kZTRfYm1jIDgKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA4IG5vZGUzX2JtYyA4CiAgICAjcG9ydDQKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgNCBub2RlM19ibWMgNCAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUzX2JtYyA0IG5vZGUxX2JtYyA0CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDQgbm9kZTRfYm1jIDQKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA0IG5vZGUyX2JtYyA0CiAgICAjcG9ydDYKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgNiBub2RlNF9ibWMgNiAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA2IG5vZGUxX2JtYyA2CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDYgbm9kZTNfYm1jIDYKICAg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LXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ub2RlIOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS1ob3N0KQogICAgICAgICAgICBzaGlmdCAgICAgICAgICAgIAogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLWhvc3Qg5ZCO5b+F6aG75oyH5a6a5Li75py65YiX6KGo77yI5aaCIC0taG9zdCAxMDIsMTAz77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIElGUz0nLCcgcmVhZCAtcmEgaG9zdF9udW1iZXJzIDw8PCAiJDEiIAogICAgIAogICAgICAgICAgICBmb3IgKChpPTA7IGk8JHsjaG9zdF9udW1iZXJzW0BdfTsgaSsrKSk7IGRvCiAgICAgICAgICAgICAgICBjYXNlICRpIGluCiAgICAgICAgICAgICAgICAgICAgMCkKICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDE9IiR7aG9zdF9udW1iZXJzWzBdfSIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAxKQogICAgICAgICAgICAgICAgICAgICAgICBob3N0Mj0iJHtob3N0X251bWJlcnNbMV19IgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGRvbmUgICAgICAgICAgICAKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKCQktLXBvcnQpCiAgICAgICAgICAgIHNoaWZ0ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tcG9ydCDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1wb3J0IDTvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGVzdF9wb3J0PSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICLplJnor6/vvJrmnKrnn6Xlj4LmlbAgJDEiCiAgICAgICAgICAgIGVjaG8gIueUqOazlTogJDAgWy0tbm9kZSBOT0RFX0lEXSBbLS1ob3N0IEhPU1QxLEhPU1QyLC4uLl0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKZmlyc3Rfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCnNlY29uZF9ub2RlPSIkKCh0YXJnZXRfc3Rhcl9ub2RlICsgNCkpIgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlN19ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZThfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDU9JChlY2hvICIkbm9kZTVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q2PSQoZWNobyAiJG5vZGU2X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nz0kKGVjaG8gIiRub2RlN19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDg9JChlY2hvICIkbm9kZThfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCmNvbGxlY3Rfb25ldF9jcm9zcygpIHsKICAgIGxvY2FsIGFjdGl2ZV9ibWM9JDEKCWxvY2FsIGNyb3NzX2JtYz0kMgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDMKCWxvY2FsIG9jc190b3BvPSQ0CiAgICBsb2NhbCBhY3RpdmVfaG9zdD0iaHR0cHM6Ly8kYWN0aXZlX2JtYyIKICAgIGxvY2FsIGNyb3NzX2hvc3Q9Imh0dHBzOi8vJGNyb3NzX2JtYyIKICAgIGxvY2FsIGFjdGl2ZV9ub2RlPSQoZWNobyAiJGFjdGl2ZV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQogICAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGVjaG8gIiRjcm9zc19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0ID09PT09PT09PT09PT09PSIKICAgICNhY3RpdmF0ZV9vY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgoJCQllY2hvICRjbWQKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAgCgogICAgI2Rpc2FibGUgb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD02OyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHhmZiAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCiAgICAKICAgIGVjaG8gLWUgIlxuc2xlZXAgMTBzLCB3YWl0aW5nIG9jcyBzdGFibGUuLi4iCiAgICBzbGVlcCAxMAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgJGFjdGl2ZV9ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaj0xOyBqPD02OyBqKyspKTsgZG8KICAgICAgbG9jYWwgYWN0aXZlX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGFjdGl2ZV9ibWMgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKSAgICAKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgICAgCiAgICAgIGlmICEgZWNobyAiJGFjdGl2ZV9wb3J0X2NtaXMiIHwgZ3JlcCAtcSAiQXN5bmNQb2xsIGZhaWxlZHxsb2NrOiBGYWlsZWQiOyB0aGVuCiAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgYnJlYWsKICAgICAgZmkgCiAgICAgIHNsZWVwIDMKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0ICRjcm9zc19ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaz0xOyBrPD02OyBrKyspKTsgZG8KICAgICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgICAgaWYgISBlY2hvICIkY3Jvc3NfcG9ydF9jbWlzIiB8IGdyZXAgLXFFICJBc3luY1BvbGwgZmFpbGVkfGxvY2s6IEZhaWxlZCI7IHRoZW4gICAgICAKICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICBicmVhawogICAgICBmaSAKICAgICAgc2xlZXAgMwogICAgZG9uZSAgICAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0IHAkYWN0aXZlX3BvcnQgUlNTSSBkYXRhIC0tLS0tIgogICAgc2xlZXAgMgogICAgbG9jYWwgY3Jvc3NfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKQogICAgICAgICAgICAKICAgICMg6LCD6K+V6L6T5Ye677yI5oyJ6ZyA5byA5ZCv77yJCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9yc3NpICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9yc3NpIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X3Jzc2kgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfcnNzaSIKICAgICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLSDosIPnlKggUHl0aG9uIOWIhuaekCAkYWN0aXZlX3BvcnQg5pWw5o2uIC0tLS0iCiAgICBleHBvcnQgTE9PUD0iJG9jc190b3BvIgogICAgZXhwb3J0IEFDVElWRV9QT1JUPSIkYWN0aXZlX25vZGUtUCRhY3RpdmVfcG9ydCIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVD0iJGNyb3NzX25vZGUtUCRhY3RpdmVfcG9ydCIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVF9SU1NJPSIkYWN0aXZlX3BvcnRfcnNzaSIgQUNUSVZFX1BPUlRfQ01JUz0iJGFjdGl2ZV9wb3J0X2NtaXMiIAogICAgZXhwb3J0IENST1NTX1BPUlRfUlNTST0iJGNyb3NzX3BvcnRfcnNzaSIgQ1JPU1NfUE9SVF9DTUlTPSIkY3Jvc3NfcG9ydF9jbWlzIgoKICAgIHB5dGhvbjMgY29sbGVjdF90ZXN0X2RhdGFfb25vY19yc3NpLnB5IAogICAgCiAgICB1bnNldCBMT09QIEFDVElWRV9CTUMgQUNUSVZFX1BPUlQgQ1JPU1NfQk1DIENST1NTX1BPUlQKICAgIHVuc2V0IEFDVElWRV9QT1JUX1JTU0kgQUNUSVZFX1BPUlRfQ01JUyBDUk9TU19QT1JUX1JTU0kgQ1JPU1NfUE9SVF9DTUlTICAgIAoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmVfYm1jIGFuZCAkY3Jvc3NfYm1jOiBwJGFjdGl2ZV9wb3J0IOaVsOaNruWkhOeQhuWujOaIkCA9PT09PT09PT09PT09PT1cbiIKICAgIHNsZWVwIDYKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBkaXNhYmxlIGFjdGl2ZSBwb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCgkJCWVjaG8gJGNtZAogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lIAp9CgpleHBvcnQgLWYgY29sbGVjdF9vbmV0X2Nyb3NzCgpsaW5rX2Nyb3NzdGFsayAoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSQxCiAgICBsb2NhbCBjcm9zc19ibWM9JDIJCglsb2NhbCBhY3RpdmVfcG9ydD0kMwogICAgbG9jYWwgYWN0aXZlX25vZGU9JChlY2hvICIkYWN0aXZlX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoZWNobyAiJGNyb3NzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoJIyMjIyMjIyMjIyNvbm9jIGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCgllY2hvICI9PT09PT09PT09PT09PXRlc3Qgbm9kZTokYWN0aXZlX25vZGUsJGNyb3NzX25vZGUgcG9ydDokYWN0aXZlX3BvcnQgb25vYyBjcm9zcyB0YWxrPT09PT09PT09PT0iCglpZiBbICIkYWN0aXZlX3BvcnQiIC1lcSA0IF07IHRoZW4KCQlsb2NhbCBvY3NfdG9wbz0ib25vYzYiCgllbGlmIFsgIiRhY3RpdmVfcG9ydCIgLWVxIDYgXTsgdGhlbgoJCWxvY2FsIG9jc190b3BvPSJvbm9jNyIKCWVsaWYgWyAiJGFjdGl2ZV9wb3J0IiAtZXEgOCBdOyB0aGVuCgkJbG9jYWwgb2NzX3RvcG89Im9ub2M2IgoJZmkKCgl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRhY3RpdmVfYm1jICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRjcm9zc19ibWMgJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoKCQoJIyMjIyMjIyMjIyNvbmV0IGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCgllY2hvICJ0ZXN0IG5vZGU6JGFjdGl2ZV9ub2RlLCRjcm9zc19ub2RlIHBvcnQ6JGFjdGl2ZV9wb3J0IG9uZXQgY3Jvc3MgdGFsayIJCglsb2NhbCBzbm9kZTE9JCgoKGFjdGl2ZV9ub2RlIC0gYm1jX2hvc3QxKSAvIDQpKQogICAgbG9jYWwgc25vZGUyPSQoKChjcm9zc19ub2RlIC0gYm1jX2hvc3QxKSAvIDQpKSAKCgkgaWYgWyAkc25vZGUxIC1lcSAkc25vZGUyIF07IHRoZW4KCQllY2hvICJ0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YiIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGIiCQoJZWxzZQoJCWVjaG8gIm5vdCB0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YSIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGEiCQkKCWZpCgkKCWlmIFsgIiRhY3RpdmVfcG9ydCIgLW5lIDggXTsgdGhlbgoJCXRpbWVvdXQgMzBzIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCgkJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkYWN0aXZlX2JtYyAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCQl0aW1lb3V0IDEyMHMgYmFzaCAtYyAnY29sbGVjdF9vbmV0X2Nyb3NzICIkQCInIF8gJGNyb3NzX2JtYyAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCglmaQkKfQpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDFfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpleHBvcnQgZGVidWdfbW9kZT0xCgpub2Rlcz0oIiRub2RlMV9ibWMiICIkbm9kZTJfYm1jIiAiJG5vZGUzX2JtYyIgIiRub2RlNF9ibWMiICIkbm9kZTVfYm1jIiAiJG5vZGU2X2JtYyIgIiRub2RlN19ibWMiICIkbm9kZThfYm1jIiApCmZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvCiAgZm9yIHBvcnQgaW4gMiA0IDYgODsgZG8KICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsr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LSDlubbooYxzZXR1cCAxMzE0MTUxNiBFUDMyIFRPUE8gTElOSy0gcG9ydDQ2IOS4uk9ORVRB77yMcG9ydDI45Li6T05PQzoiMDQwMzAyMDEwODA3MDYwNSIsIOWPr+mAmui/h2xvb3BfdGltZXM9MSDmlLlsb29w5qyh5pWwCjMuIDUyX3p0ZS0xMzE0MTUxNi1yZXNldF80Ry1HUFUuc2ggIC0tIOW5tuihjDEzMTQxNTE2IFJFU0VUIDRHIEdQVQo0LiA1Ml96dGUtNTY3OC1zZXR1cF80Ry1saW5rdXBfcmVjb3ZlcnlfQ0Uuc2ggLS0g5bm26KGMc2V0dXAgNTY3OCBFUDMyIFRPUE8gTElOSy0gcG9ydDQ2IOS4uk9ORVRB77yMcG9ydDLkuLpPTk9DNe+8jHBvcnQ45Li6T05PQzYsIOWPr+mAmui/h2xvb3BfdGltZXM9MSDmlLlsb29w5qyh5pWwCjUuIDUyX3p0ZS0xMjM0LXNldHVwXzRHLWxpbmt1cF9yZWNvdmVyeV9DRS5zaCAtLSDlubbooYxzZXR1cCAxMjM0IEVQMzIgVE9QTyBMSU5LLSBwb3J0NDYg5Li6T05FVEHvvIxwb3J0MuS4uk9OT0M177yMcG9ydDjkuLpPTk9DNiwg5Y+v6YCa6L+HbG9vcF90aW1lcz0xIOaUuWxvb3DmrKHmlbAKCjYuIDUwX3NldF9wb3J0X3RvcG8uc2ggYm1jX2lwIHBvcnQgdG9wbyAtLemFjee9rnBvcnQgdG9wbyDohJrmnKzlj6/phY3nva7lj4LmlbDmiafooYwKNy4gNTBfenRlX29uZXRhLWxpbmtfcmVjb3ZlcnlfQ0Uuc2ggc3ZyMV9pcCBzdnIxX2JtY19pcCBzdnIyX2lwIHN2cjJfYm1jX2lwIHBvcnQgLS0gc2V0dXAgT05FVEEgbGlua3VwIOiEmuacrO+8jCDkuI3ljIXlkKsg6YWN572udG9wb+WSjHJlc2V0IEdQVeatpemqpAo4LiA1MF96dGVfb25vYy1saW5rX3JlY292ZXJ5X0NFLnNoIHN2cl9pcCBzdnJfYm1jX2lwIHBvcnQgLS0gc2V0dXAgT05PQyBsaW5rdXAg6ISa5pys77yMIOS4jeWMheWQqyDphY3nva50b3Bv5ZKMcmVzZXQgR1BV5q2l6aqkCjkuIDUw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IGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgICAgIC0tdGVzdCkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgcnVuX2FsbD1mYWxzZQogICAgICAgICAgICAjIOWkhOeQhi0tdGVzdOWQjuWkmuS4quWPguaVsAogICAgICAgICAgICB3aGlsZSBbWyAkIyAtZ3QgMCAmJiAhICIkMSIgPX4gXi0tIF1dOyBkbwogICAgICAgICAgICAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgICAgICAgICAgICAgcmVzZXRfZ3B1KQogICAgICAgICAgICAgICAgICAgICAgICByZXNldF9ncHVfZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG8pCiAgICAgICAgICAgICAgICAgICAgICAgIHNldF90b3BvX2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8muS4jeaUr+aMgeeahOa1i+ivleWPguaVsCAnJDEn77yM5LuF5pSv5oyBIHJlc2V0X2dwdSDmiJYgc2V0X3RvcG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGVjaG8gIumUmeivr++8muacquefpeWPguaVsCAnJDEn77yM5pSv5oyB55qE5Y+C5pWw77yaLS1ub2RlIDznvJblj7c+IC0tdGVzdCBbcmVzZXRfZ3B1fHNldF90b3BvLi4uXSIKICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIDs7CiAgICBlc2FjCmRvbmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI+WKoOi9vUpTT07phY3nva4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCiMg5LuOSlNPTuivu+WPlumFjee9ru+8iGpx6Kej5p6Q77yJCm5vZGUxX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMV9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpzdGFyX25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgoKYm1jX2hvc3QxPSQoZWNobyAiJG5vZGUxX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mj0kKGVjaG8gIiRub2RlMl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDM9JChlY2hvICIkbm9kZTNfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q0PSQoZWNobyAiJG5vZGU0X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKTE9HX0ZJTEU9ImxvZ3Mvc3VtbWFyeV9sb2dzL3N0cmVzcy00LTYtOF9saW5rc19vbmV0Yl9yZWNvdmVyeV9DTUlTLW1vbl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEdQVSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZ3B1KCkgeyAgCiAgICBhY3RpdmVfcmVtb3RlMT0kMQogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gLWUgIlxuLS0tLS0tOlJFU0VUICRhY3RpdmVfcmVtb3RlMSBHUFUgLS0tLS0tIiA+JjIKICAgIGZvciAoKGk9MTsgaTw9MzsgaSsrKSk7IGRvCiAgICAgICAgcmVzdF9ncHU9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJGFjdGl2ZV9yZW1vdGUxICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJicnNtaSByZXNldCAtZ1wiIicgMj4mMSkKICAgICAgICBlY2hvICJyZXNldCAkYWN0aXZlX3JlbW90ZTEgR1BVOiIgPiYyCiAgICAgICAgZWNobyAiJHJlc3RfZ3B1IiA+JjIgICAgCiAgICAgICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRyZXN0X2dwdSIgfCBncmVwIC1jICJHUFVbMC03XSBTdWNjZXNzZWQuIikKICAgICAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIHN1Y2Nlc3MiID4mMgogICAgICAgICAgICBicmVhayAgICAgICAgCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgZmFpbCIgPiYyICAgICAgICAgICAgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCAyMAogICAgZG9uZQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGlzYWJsZV9hbGxfbHRzc20jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpc2FibGVfYWxsX2x0c3NtKCkgeyAgIAogICAgbm9kZV9pcD0kMSAgICAKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFUgcG9ydOaYr+WQpumHjee9ruaIkOWKnwogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfbG9jYWxncHUiIHwgZ3JlcCAtY0UgJ15HUFUgWzAtN10sIEhXXFtbMC05XStcXTogZGlzYWJsZSBsdHNzbSBcKDIsIDQsIDYsIDgsIDEwXCkgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKZGlzYWJsZV9wb3J0X2x0c3NtKCkgewogICAgbm9kZV9pcD0kMQogICAgbm9kZV9wb3J0PSQyCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgcG9ydCRub2RlX3BvcnQgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFXmmK/lkKbph43nva7miJDlip8gICAgCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19ncHVwb3J0IiB8IGdyZXAgLWMgJ0hXXFtbMC03XVxdOiBkaXNhYmxlIGx0c3NtICckbm9kZV9wb3J0JyBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEVYUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZXhwKCkgeyAgIAogICAgbG9jYWwgaG9zdD0iJDEiCiAgICBsb2NhbCBwb3J0PSIkMiIgIAogICAgZWNobyAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgIHNsZWVwIDMKICAgIGVjaG8gImNoZWsgRVhQIHN0YXQuLi4iCiAgICBleHBfc3RhdGU9JCgkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCBzdGF0IDI+JjEpCQogICAgZWNobyAiZXhwIHN0YXRlOiIKICAgIGVjaG8gIiRleHBfc3RhdGUiIAogICAgdGltX3N3X3RpbWU9JChlY2hvICIkZXhwX3N0YXRlIiB8IGdyZXAgIlRJTV9TVzoiIHwgc2VkIC1uICdzLy4qVElNX1NXOiBcKFteLF0qXCkuKi9cMS9wJykKICAgIHNlY19wYXJ0PSQoZWNobyAiJHRpbV9zd190aW1lIiB8IGF3ayAtRic6JyAne3ByaW50ICRORn0nKQogICAgc2Vjb25kc19zdHI9JChlY2hvICIkc2VjX3BhcnQiIHwgdHIgLWQgJ1xuJyB8IGdyZXAgLW9FICdbMC05XSsnIHwgaGVhZCAtbjEpCiAgICBpZiBbWyAiJHNlY29uZHNfc3RyIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIHNlY29uZHM9JCgoMTAjJHNlY29uZHNfc3RyKSkKICAgIGVsc2UKICAgICAgICBlY2hvICLnp5LmlbDmoLzlvI/ml6DmlYjvvIjmj5Dlj5blgLw6IFskc2Vjb25kc19zdHJdLCDop4bkuLpGQUlMIiAgICAgICAgCiAgICAgICAgY29udGludWUKICAgIGZpCiAgICAjIOWIpOaWree7k+aenAogICAgaWYgWyAiJHNlY29uZHMiIC1sdCA1IF07IHRoZW4gICAgICAgIAogICAgICAgIGVjaG8gLWUgIkVYUCByZXNldCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAiVElNX1NXOiAkc2Vjb25kcyBzLCBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb249IkdQVSBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgcmV0dXJuIDIKICAgIGZpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2xvYWQgZ3B1IHRvcG8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfZ3B1dG9wbygpIHsKICAgIG5vZGVfaXA9JDEgCiAgICBncHVfdG9wbz0kMgogICAgZWNobyAtZSAiXG4tLS0tbG9hZC1ncHUtdG9wbyAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzZwXzMyLmpzb25cIiInCiAgICAgICAKICAgIG91dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfNnBfMzIuanNvblwiIicgMj4mMSkKICAgIHNsZWVwIDEKICAgIGVjaG8gImxvYWQgdG9wbyByZXN1bHQ6IgogICAgZWNobyAiJG91dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgIyBod2lkX2NvdW50PTgKICAgICMgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGUyX3BvcnRcXTogUmVhZHkiKSAgICAKICAgICMgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICMgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAjICAgICByZXR1cm4gMCAKICAgICMgZWxzZQogICAgIyAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICMgICAgIHJldHVybiAwIAogICAgIyBmaSAKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjTElOS1VQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpvbmV0X2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGUxX2lwPSQxCiAgICBsb2NhbCBub2RlMV9wb3J0PSQyCiAgICBsb2NhbCBub2RlMl9pcD0kMwogICAgbG9jYWwgbm9kZTJfcG9ydD0kNCAgIAoKICAgIGVjaG8gLWUgIlxuLS0tLU9ORVQtIExJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAKICAgIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicgJgogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCm9ub2NfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZV9pcD0kMQogICAgbG9jYWwgbm9kZV9wb3J0PSQyCgogICAgZWNobyAtZSAiXG4tLS0tT05PQy1MSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicKICAgICAgICAgICAgCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJyAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGVfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0dQVVNQRUVEIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpncHVfc3BlZWQoKSB7CiAgICBob3N0PSQxCiAgICBwb3J0PSQyCgogICAgIy0tLS0tLS0tLS0tIGNoZWNrIGFsbCBHUFUgcG9ydCBpcyBHRU41WDggb3Igbm90LS0tLS0tLS0tLS0tLQogICAgZWNobyAtZSAiXG4tLS0tT05FVEEtIGNoZWNrIGFsbCBHUFUgcG9ydCAkcG9ydCBpcyBHRU41WDggb3Igbm90IC0tLS0iIAogICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8gICAgICAgCiAgICAgICAgR0VONV9wYXR0ZXJuPSJQb3J0ICRwb3J0OiBHRU46IDUsIFdpZHRoOiA4IgogICAgICAgIGV4cGVjdGVkX2NvdW50PTggICAgICAgIAogICAgICAgIGxpbmsxX2Z1bGw9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLWNcIiInKQogICAgICAgIGxpbmsxX0dFTj0kKGVjaG8gIiRsaW5rMV9mdWxsIiB8IGdyZXAgICJQb3J0ICRwb3J0IiAyPiYxKSAKICAgICAgICBlY2hvIC1lICJsaW5rMTpcbiAkbGluazFfR0VOIgogICAgICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX0dFTiIgfCBncmVwIC1jICIkR0VONV9wYXR0ZXJuIiAyPiYxKQogICAgICAgIGVjaG8gImxpbmsxIGdlbjUgY291bnQ6ICRsaW5rMV9jb3VudCIJCiAgICAgICAgaWYgWyAkbGluazFfY291bnQgLWVxICRleHBlY3RlZF9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBzdWNjZXNzIgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb249IlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDYKICAgIGRvbmUKfQoKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8gIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IOWOi+a1i2xpbmt1cCDmtYvor5XnrKwkaSDova4gPT09PT09PT09PT09PT09IgogICAgZWNobyAgICAKICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICBmYWlsX3JlYXNvbj0iIgogICAgICAgIAogICAgIyMjIyMjIyMjIyNzZXQgNEcgVE9QTyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBpZiBbICIkc2V0X3RvcG9fZmxhZyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbj09PT09PSBzZXQgNEcgdG9vcCA9PT09PT0iCiAgICAgICAgZWNobwogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDggb25vYzYgJgogICAgICAgIHdhaXQKICAgICAgICBlY2hvICAgICAgICAKICAgIGZpCgogICAgI1JFU0VUIDRHIEdQVQogICAgZWNobyAtZSAiXG49PT09PT0gcmVzZXQgNEcgR1BVID09PT09PSIgICAgCiAgICBlY2hvCiAgICBlY2hvIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcAogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwICYKICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMl9pcCAmCiAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTNfaXAgJgogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGU0X2lwICYKICAgIHdhaXQKICAgIHNsZWVwIDMKICAgIGVjaG8KCiAgICAjUkVTRVRFWFAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXJlc2V0IGV4cCAtLS0tIiAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9leHBfY29sZF9yZXNldC5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCkKICAgIHNsZWVwIDEKICAgIAogICAgI09DUy1TQ1JFRU4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLW9jc19zY3JlZW4gYmVmb3JlIGxpbmt1cC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKCiAgICAjb25ldCBsaW5rdXAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUxX2lwICI0IiAkbm9kZTNfaXAgIjQiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgIAogICAgc2xlZXAgMiAgCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMl9pcCAiNCIgJG5vZGU0X2lwICI0IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAgCiAgICBzbGVlcCAyIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjYiICRub2RlNF9pcCAiNiI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgCiAgICBzbGVlcCAyICAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUyX2lwICI2IiAkbm9kZTNfaXAgIjYiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgICAKICAgIHNsZWVwIDIgCgogICAgI29ub2MgbGlua3VwCiAgICBub2Rlcz0oIiRub2RlMV9pcCIgIiRub2RlMl9pcCIgIiRub2RlM19pcCIgIiRub2RlNF9pcCIpIAogICAgcG9ydHM9KDIgOCkgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvIAogICAgICAgIGZvciBwb3J0IGluICIke3BvcnRzW0BdfSI7IGRvICAgICAgCiAgICAgICAgICAgIGlmICEgb25vY19saW5rdXAgJG5vZGUgJHBvcnQ7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBvbm9jIGxpbmt1cCBmYWlsOyAiCiAgICAgICAgICAgICAgICBzbGVlcCAyCiAgICAgICAgICAgIGZpIAogICAgICAgIGRvbmUgICAgICAgCiAgICBkb25lCgogICAgI29jcy1zY3JlZW4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDEwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICBzbGVlcCAxMAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKICAgIHNsZWVwIDYKICAgICMgI1NMRUVQIDYwUyBvY3Mtc2NyZWVuCiAgICAjIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDYwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICAjIHNsZWVwIDYwCiAgICAjIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCiAgICAKICAgICMjIyNyZXN1bHQjIyMgICAgICAgIAogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tIOacrOi9rua1i+ivlee7k+aenCAtLS0tIgogICAgaWYgWyAiJGN1cnJlbnRfc3VjY2VzcyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbuesrCRp6L2u5rWL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ICAgICBlY2hvICLplJnor6/vvJotLW5vZGUg5ZCO5b+F6aG75oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICB0YXJnZXRfc3Rhcl9ub2RlPSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCmZpcnN0X25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgpzZWNvbmRfbm9kZT0iJCgodGFyZ2V0X3N0YXJfbm9kZSArIDQpKSIKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU1X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU2X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU3X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU4X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZThfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q1PSQoZWNobyAiJG5vZGU1X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nj0kKGVjaG8gIiRub2RlNl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDc9JChlY2hvICIkbm9kZTdfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q4PSQoZWNobyAiJG5vZGU4X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKY29udmVydF9ub2RlKCkgewogICAgbG9jYWwgaW5wdXRfbm9kZT0iJDEiCiAgICBsb2NhbCBzdGFydF9ub2RlPSIkMiIKICAgIGxvY2FsIG5vZGVfc3VmZml4CiAgICBsb2NhbCB0YXJnZXRfbm9kZV9udW0KICAgIGxvY2FsIHRhcmdldF9ub2RlICAgIAogICAgbm9kZV9zdWZmaXg9JChlY2hvICIkaW5wdXRfbm9kZSIgfCBzZWQgLW5FICdzL15ub2RlKFswLTldKykkL1wxL3AnKQoKICAgIGlmIFtbIC16ICIkbm9kZV9zdWZmaXgiIF1dOyB0aGVuCiAgICAgICAgZWNobyAi6ZSZ6K+v77ya6L6T5YWlIG5vZGUg5qC85byP5peg5pWI77yM6ZyA5Li6ICdub2RlK+aVsOWtlyfvvIjlpoIgbm9kZTHjgIFub2RlMu+8iSIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBpZiAhIFtbICIkc3RhcnRfbm9kZSIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrotbflp4vlgY/np7vph4/pnIDkuLrmraPmlbTmlbAiID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICB0YXJnZXRfbm9kZV9udW09JCgobm9kZV9zdWZmaXggKyBzdGFydF9ub2RlIC0gMSkpCiAgICB0YXJnZXRfbm9kZT0ibm9kZSR0YXJnZXRfbm9kZV9udW0iCiAgICBlY2hvICIkdGFyZ2V0X25vZGUiCiAgICByZXR1cm4gMAp9CgoKY29sbGVjdF9vbmV0X2Nyb3NzKCkgewogICAgbG9jYWwgYWN0aXZlX2JtYz0iJDEiCiAgICBsb2NhbCBhY3RpdmVfYm1jaXA9IiR7IWFjdGl2ZV9ibWN9IiAgCiAgICBsb2NhbCBfYWN0aXZlX25vZGU9IiR7YWN0aXZlX2JtYyVfYm1jfSIKICAgIGxvY2FsIGFjdGl2ZV9wb3J0PSQyCiAgICBsb2NhbCBjcm9zc19ibWM9JDMKICAgIGxvY2FsIGNyb3NzX2JtY2lwPSIkeyFjcm9zc19ibWN9IiAgCiAgICBsb2NhbCBfY3Jvc3Nfbm9kZT0iJHtjcm9zc19ibWMlX2JtY30iCiAgICBsb2NhbCBjcm9zc19wb3J0PSQ0CiAgICBsb2NhbCBhY3RpdmVfaG9zdD0iaHR0cHM6Ly8kYWN0aXZlX2JtY2lwIgogICAgbG9jYWwgY3Jvc3NfaG9zdD0iaHR0cHM6Ly8kY3Jvc3NfYm1jaXAiCgogICAgbG9jYWwgYWN0aXZlX25vZGU9JChjb252ZXJ0X25vZGUgJF9hY3RpdmVfbm9kZSAkc3Rhcl9ub2RlKQogICAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2Nyb3NzX25vZGUgJHN0YXJfbm9kZSkKICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0ID09PT09PT09PT09PT09PSIKICAgICNhY3RpdmF0ZV9vY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lICAKICAgICNkaXNhYmxlIG9jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHhmZiAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCiAgICAKICAgIGVjaG8gLWUgIlxud2FpdCAxMHMsIG9jcyBzdGFibGUuLi4iCiAgICBzbGVlcCAxMAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCBkYXRhIC0tLS0tIgogICAgbG9jYWwgYWN0aXZlX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGFjdGl2ZV9ibWNpcCAtZSAkYWN0aXZlX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICBsb2NhbCBjcm9zc19wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRjcm9zc19ibWNpcCAtZSAkY3Jvc3NfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9jbWlzICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X2NtaXMiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9jbWlzICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9jbWlzIgogICAgc2xlZXAgMgogICAgbG9jYWwgY3Jvc3NfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgMj4mMSkKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpCiAgICAgICAgICAgIAogICAgIyDosIPor5XovpPlh7rvvIjmjInpnIDlvIDlkK/vvIkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X3Jzc2kgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X3Jzc2kiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfcnNzaSAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9yc3NpIgogICAgICAgIAogICAgZWNobyAtZSAiXG4tLS0tIOiwg+eUqCBQeXRob24g5YiG5p6QICRhY3RpdmVfcG9ydCDmlbDmja4gLS0tLSIgICAgCiAgICBleHBvcnQgQ1NWX0ZJTEU9IiRjc3ZfZmlsZSIKICAgIGV4cG9ydCBMT09QPSIkaSIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVD0iJGFjdGl2ZV9ub2RlLVAkYWN0aXZlX3BvcnQiIAogICAgZXhwb3J0IENST1NTX1BPUlQ9IiRjcm9zc19ub2RlLVAkY3Jvc3NfcG9ydCIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVF9SU1NJPSIkYWN0aXZlX3BvcnRfcnNzaSIgQUNUSVZFX1BPUlRfQ01JUz0iJGFjdGl2ZV9wb3J0X2NtaXMiIAogICAgZXhwb3J0IENST1NTX1BPUlRfUlNTST0iJGNyb3NzX3BvcnRfcnNzaSIgQ1JPU1NfUE9SVF9DTUlTPSIkY3Jvc3NfcG9ydF9jbWlzIgoKICAgIHB5dGhvbjMgY29sbGVjdF90ZXN0X2RhdGFfb25vY19yc3NpLnB5IAogICAgCiAgICB1bnNldCBDU1ZfRklMRSBMT09QIEFDVElWRV9CTUMgQUNUSVZFX1BPUlQgQ1JPU1NfQk1DIENST1NTX1BPUlQKICAgIHVuc2V0IEFDVElWRV9QT1JUX1JTU0kgQUNUSVZFX1BPUlRfQ01JUyBDUk9TU19QT1JUX1JTU0kgQ1JPU1NfUE9SVF9DTUlTICAgIAoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmVfYm1jIGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQg5pWw5o2u5aSE55CG5a6M5oiQID09PT09PT09PT09PT09PVxuIgogICAgc2xlZXAgMgoJIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmUgY3Jvc3NfcG9ydCA9PT09PT09PT09PT09PT1cbiIKICAgICNhY3RpdmUgY3Jvc3NfcG9ydCAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCQp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKY3N2X2ZpbGU9ImNzdl9kYXRhLzY0X3h6LW9uZXRfc3dhLWNyb3NzdGFsay1iX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmRlYnVnX21vZGU9MQplY2hvIC1lICJcbj09PT09PSBzZXQgc3Bub2RlMSAgdG9wbyA9PT09PT0iCmVjaG8KI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA0IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNiBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNCBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDYgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA0IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNiBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDggb25vYzYgJgplY2hvCmVjaG8gLWUgIlxuPT09PT09IHNldCBzcG5vZGUyICB0b3BvID09PT09PSIKZWNobwojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTVfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU1X2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNl9ibWMgNCBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTZfYm1jIDYgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU3X2JtYyA0IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlN19ibWMgNiBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZThfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU4X2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgOCBvbm9jNiAmCndhaXQKZWNobyAgCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8KICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09IOesrCAkaSDova7lvqrnjq8gPT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgoKICAgICNzcG5vZGUxPjIKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNl9ibWMgNCBub2RlNF9ibWMgNAoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU0X2JtYyA0IG5vZGU2X2JtYyA0CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTZfYm1jIDYgbm9kZTNfYm1jIDYKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlM19ibWMgNiBub2RlNl9ibWMgNgogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU1X2JtYyA0IG5vZGUzX2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTNfYm1jIDQgbm9kZTVfYm1jIDQKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNV9ibWMgNiBub2RlNF9ibWMgNgoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU0X2JtYyA2IG5vZGU1X2JtYyA2CiAgICAjc3Bub2RlMj4xCiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTJfYm1jIDQgbm9kZThfYm1jIDQKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlOF9ibWMgNCBub2RlMl9ibWMgNAogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGUyX2JtYyA2IG5vZGU3X2JtYyA2Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTdfYm1jIDYgbm9kZTJfYm1jIDYKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlMV9ibWMgNCBub2RlN19ibWMgNAoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU3X2JtYyA0IG5vZGUxX2JtYyA0CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTFfYm1jIDYgbm9kZThfYm1jIDYKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlOF9ibWMgNiBub2RlMV9ibWMgNgpkb25lCmVjaG8gLWUgIlxu5omA5pyJ5b6q546v5omn6KGM5a6M5oiQLOaVsOaNruW3suS/neWtmOiHszokY3N2X2ZpbGUiCmNobW9kIC1SIDc1NSBjc3ZfZGF0YS8KIyDorrDlvZXnu5PmnZ/ml7bpl7QKZWNobyAtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiLS0tLS0tIOa1i+ivlee7k+adn+S6jjogJChkYXRlKSAtLS0tLS0iCmVjaG8gIi0tLS0tLSDlrozmlbTnu5Pmnpzlt7Lkv53lrZjliLDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSAtLS0tLSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdG9feWQvc2V0X3BvcnRfdG9wby5zaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAzMTI0ADE1MTIwNTExNzM3ADAxNDEyNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS9iaW4vYmFzaAoKI2NvbmZpZ3VyZQpleHBfdG9vbD0iLi9zbWJ1cy10b29sL2J1aWxkL3doaXRlcml2ZXJfZXhwLmV4ZSIKYm1jX2lwPSQxCnBvcnQ9JDIKY3Vycm5lbnRfc2V0PSQzCmJtY19ob3N0PSJodHRwczovLyRibWNfaXAiCmVjaG8gJGN1cnJuZW50X3NldAppZiBbICRjdXJybmVudF9zZXQgPSAib25vYzEiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDIwMTA0MDMwNjA1MDgwNyIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzIiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDQwMzAyMDEwODA3MDYwNSIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzMiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDgwNzA2MDUwNDAzMDIwMSIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzQiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDMwNDAxMDIwNzA4MDUwNiIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzUiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDYwNTA4MDcwMjAxMDQwMyIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzYiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDcwODA1MDYwMzA0MDEwMiIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25vYzciIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMDUwNjA3MDgwMTAyMDMwNCIKZWxpZiBbICRjdXJybmVudF9zZXQgPSAib25ldGEiIF07IHRoZW4KICAgIHBvcnRfdG9wbz0iMTExMTExMTExMTExMTExMSIKZWxzZQogICAgcG9ydF90b3BvPSIxMjEyMTIxMjEyMTIxMjEyIgpmaQoKZm9yICgoaT0xOyBpPD0xNjsgaSsrKSk7IGRvCiAgICBlY2hvICIkZXhwX3Rvb2wgLS1ob3N0ICRibWNfaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgdmNtZCAtLXBhcmFtICJmbDc4NiByb3V0ZSAkcG9ydF90b3BvIiIKICAgIHRvcG9fcmVzdWx0PSQoJGV4cF90b29sIC0taG9zdCAkYm1jX2hvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHZjbWQgLS1wYXJhbSAiZmw3ODYgcm91dGUgJHBvcnRfdG9wbyIgMj4mMSkKICAgIGVjaG8gIiR0b3BvX3Jlc3VsdCIKCiAgICBpZiBbWyAiJHRvcG9fcmVzdWx0IiA9fiAiRkw3ODZfMTo6U2V0Um91dGUiIF1dICYmIFwKICAgIFtbICIkdG9wb19yZXN1bHQiID1+ICJGTDc4Nl8yOjpTZXRSb3V0ZSIgXV0gJiYgXAogICAgW1sgIiR0b3BvX3Jlc3VsdCIgPX4gIkZMNzg2XzM6OlNldFJvdXRlIiBdXSAmJiBcCiAgICBbWyAiJHRvcG9fcmVzdWx0IiA9fiAiRkw3ODZfNDo6U2V0Um91dGUiIF1dICYmIFwKICAgIFtbICIkdG9wb19yZXN1bHQiID1+ICJGTDc4Nl81OjpTZXRSb3V0ZSIgXV0gJiYgXAogICAgW1sgIiR0b3BvX3Jlc3VsdCIgPX4gIkZMNzg2XzY6OlNldFJvdXRlIiBdXSAmJiBcCiAgICBbWyAiJHRvcG9fcmVzdWx0IiA9fiAiRkw3ODZfNzo6U2V0Um91dGUiIF1dICYmIFwKICAgIFtbICIkdG9wb19yZXN1bHQiID1+ICJGTDc4Nl84OjpTZXRSb3V0ZSIgXV07IHRoZW4KICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBPQ1MgdG9wbyBzZXQgc3VjY2VzcyIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IE9DUyB0b3BvIHNldCBmYWlsIgogICAgICAgIAogICAgZmkgIAogICAgc2xlZXAgMTAgICAgICAgICAgICAgICAKZG9uZQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=