IyEvYmluL3NoCgpwYXRoX3NoPWBudiBnZXQgcGF0aF9zaGAKLiAkcGF0aF9zaC9nbG9iYWwuc2gKZWNobyAiSW5mbzogcHNleHRfdXBkb3duLnNoICQxICQyIHN0YXJ0IiA+PiAkdGVzdF9sb2cKCmVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCmNfaWQ9JDIKcHNfaWY9YG52IGdldCBwc3dhbmAkY19pZApldGhfaWY9YG52IGdldCAicHNfZXh0IiRjX2lkYApleHRfYnI9ImJyIiRjX2lkCnBzX2V4dF9tb2RlPWBudiBnZXQgbmVlZF9qaWxpYW5gCiPTw7unyejWw76yzKxpcKGiZ3ejrG5t1Nq0y7SmvMbL4wphcnBfcHJveHlfa2lsbCgpCnsKCXBzID4gJHtwYXRoX3RtcH0venRlX2FycF9wcm94eS4kZXh0X2JyLiQkCglhcnBfcHJveHlfcGlkPWBhd2sgJ0JFR0lOe3RlbXAxPSInIiR7ZXh0X2JyfSInIjt0ZW1wMj0ienRlX2FycF9wcm94eSJ9e2lmKGluZGV4KCQwLHRlbXAxKT4wICYmIGluZGV4KCQwLHRlbXAyKT4wKXtwcmludCAkMX19JyAke3BhdGhfdG1wfS96dGVfYXJwX3Byb3h5LiRleHRfYnIuJCRgCglybSAtZiAke3BhdGhfdG1wfS96dGVfYXJwX3Byb3h5LiRleHRfYnIuJCQKCVsgLW4gIiRhcnBfcHJveHlfcGlkIiBdICYmIHsga2lsbCAkYXJwX3Byb3h5X3BpZDsgZWNobyAidGVzdDoga2lsbCB1ZGhjcGMgJGFycF9wcm94eV9waWQgIiA+PiAkdGVzdF9sb2cgOyB9Cn0KCmFycF9wcm94eV9zZXQoKQp7CglhcnBfcHJveHlfa2lsbAoJKHp0ZV9hcnBfcHJveHkgLWkgJGV4dF9iciAyPj4gJHRlc3RfbG9nIHx8IGVjaG8gIkVycm9yOiB6dGVfYXJwX3Byb3h5IC1pICRleHRfYnIgZmFpbGVkLiIgPj4gJHRlc3RfbG9nKSAmCn0KCmdldF9tYXNrKCkKewogICAgbWFzaz1gZWNobyAke3BzX2lwfSIuIiR7Z3d9IHwgYXdrIC1GICcuJyAnewogICAgICAgIG5tMT0wO25tMj0wO25tMz0wCgkgICAgaWYoJDEgPT0gJDUpCgkgICAgICAgbm0xPTI1NQoJCgkgICAgaWYoMjU1ID09IG5tMSAmJiAkMiA9PSAkNikKCSAgICAgICBubTI9MjU1CgkKCSAgICBpZigyNTUgPT0gbm0yICYmICQzID09ICQ3KQoJICAgICAgIG5tMz0yNTUKCQoJICAgIHByaW50ZiBubTEiLiJubTIiLiJubTMiLjAiCiAgICB9J2AKfQoKZGhjcF9zZXQoKQp7CiAgICAKCXN0YXJ0PSRwZHBfaXAgCiAgICBlbmQ9JHBkcF9pcAoJI2521rW3x7/V1PKx7cq+08O7p8no1sPBy76yzKxpcKGiZ3cKCWd3PWBudiBnZXQgJHBzX2lmIl9ndyJgCglpZiBbICItJGd3IiA9PSAiLSIgLW8gIi0kZ3ciID09ICItMC4wLjAuMCIgXTsgdGhlbgoJCWd3PSRicl9pcAoJCW1hc2s9JHZhbGlkX21hc2sKICAgICAgICBlY2hvIHBzaXAgJHBzX2lwIGJyX2lwICAkYnJfaXAgdmFsaWRfbWFzayAkdmFsaWRfbWFzayAgJG1hc2sKCWVsc2UKICAgICAgICBlY2hvICJubyBtYXNrIgoJICAgIGdldF9tYXNrCglmaQoJbnYgc2V0ICRleHRfYnIiX25tIj0kbWFzayAKCWlmY29uZmlnICRleHRfYnIgbmV0bWFzayAkbWFzayAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGlmY29uZmlnICRldGhfYnIgbmV0bWFzayAkbWFzayBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCiAgICBkbnM9YG52IGdldCAkcHNfaWYiX3ByaWRucyJgCiAgICBkbnMyPWBudiBnZXQgJHBzX2lmIl9zZWNkbnMiYAogICAgbGVhc2U9Ijg2NDAwIgoJCiAgICAjsb612M34wufF5NbDCiAgICBpZiBbICItJGRucyIgPT0gIi0iIC1vICItJGRucyIgPT0gIi0wLjAuMC4wIiBdICYmIFsgIi0kZG5zMiIgPT0gIi0iIC1vICItJGRuczIiID09ICItMC4wLjAuMCIgXTsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBubyB2YWxpZCBkbnMsIHVzZSBkZWZhdWx0IGRucy4iID4+ICR0ZXN0X2xvZwogICAgICAgIGRucz0iMTE0LjExNC4xMTQuMTE0IgogICAgICAgIGRuczI9IjguOC44LjgiCiAgICBmaQogICAgcm0gLXJmICRwYXRoX2NvbmYiL3VkaGNwZCIkY19pZCIuY29uZiIKCXRvdWNoICRwYXRoX2NvbmYiL3VkaGNwZCIkY19pZCIuY29uZiIKCWVjaG8gIiAiID4gJHBhdGhfY29uZiIvdWRoY3BkIiRjX2lkIi5jb25mIgoJCiAgICBpZiBbICItJGRucyIgIT0gIi0iIC1hICItJGRucyIgIT0gIi0wLjAuMC4wIiBdOyB0aGVuCiAgICAgICAgZWNobyAibmFtZXNlcnZlciAkZG5zIiA+PiAvZXRjL3Jlc29sdi5jb25mCiAgICBmaQogICAgaWYgWyAiLSRkbnMyIiAhPSAiLSIgLWEgIi0kZG5zMiIgIT0gIi0wLjAuMC4wIiBdOyB0aGVuCiAgICAgICAgZWNobyAibmFtZXNlcnZlciAkZG5zMiIgPj4gL2V0Yy9yZXNvbHYuY29uZgogICAgZmkKICAgIAogICAgcGlkZmlsZT0kcGF0aF9jb25mIi91ZGhjcGQiJGNfaWQiLnBpZCIKICAgIGxlYXNlc2ZpbGU9JHBhdGhfY29uZiIvdWRoY3BkIiRjX2lkIi5sZWFzZXMiCgogICAgc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtcyAkc3RhcnQKICAgIHNoICRwYXRoX3NoL2NvbmZpZy11ZGhjcGQuc2ggJGNfaWQgLWUgJGVuZAogICAgc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtaSAkZXh0X2JyCiAgICBzaCAkcGF0aF9zaC9jb25maWctdWRoY3BkLnNoICRjX2lkIC1tICRtYXNrCiAgICBzaCAkcGF0aF9zaC9jb25maWctdWRoY3BkLnNoICRjX2lkIC1kICRkbnMgJGRuczIKICAgIGlmIFsgIi0kZ3ciICE9ICItIiBdOyB0aGVuCiAgICAgICAgc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtZyAkZ3cKICAgIGZpCiAgICBpZiBbICItJGxlYXNlIiAhPSAiLSIgXTsgdGhlbgogICAgICAgIHNoICRwYXRoX3NoL2NvbmZpZy11ZGhjcGQuc2ggJGNfaWQgLXQgJGxlYXNlCiAgICBmaQogICAgc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtcCAkcGlkZmlsZQogICAgc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtbCAkbGVhc2VzZmlsZQoJc2ggJHBhdGhfc2gvY29uZmlnLXVkaGNwZC5zaCAkY19pZCAtciAxCn0KZ2V0X3ZhbGlkbnVtKCkKewogICAgbGFzdDQ9JHtpcGFkZHIjIyoufQogICAgaXBhZGRyPSR7aXBhZGRyJS4qfQogICAgbWFyaz1gZXhwciAkbGFzdDQgJSAyYAogICAgbGFzdDM9MAogICAgZnJhZz1gZXhwciAkZnJhZyArIDFgCiAgICBlY2hvICRpcGFkZHIgJGxhc3Q0ICRsYXN0MwogICAgaWYgWyAkbGFzdDQgLWVxIDAgXSB8fCBbICRsYXN0NCAtZXEgMjU1IF07CiAgICB0aGVuCiAgICAgICAgICAgIGxhc3QzPSR7aXBhZGRyIyMqLn0KICAgIGZpCiAgICBpZiBbICRsYXN0NCAtZXEgMCBdICYmIFsgJGxhc3QzIC1lcSAwIF07CiAgICB0aGVuCiAgICAgICAgZ2V0X3ZhbGlkbnVtCiAgICBlbGlmIFsgJGxhc3Q0IC1lcSAyNTUgXSAmJiBbICRsYXN0MyAtZXEgMjU1IF07CiAgICB0aGVuCiAgICAgICAgZ2V0X3ZhbGlkbnVtCiAgICBlbHNlCiAgICAgICAgcmV0dXJuCiAgICBmaQp9CmdldF9uZXRtYXNrX2J0cnVuaygpCnsKCXBkcGlwPSQxCglwZHBfaXA0PSR7cGRwaXAjIyoufQoJZnJvbnQzPSR7cGRwaXAlLip9CgkKCWlmIFsgJHBkcF9pcDQgLWVxIDEgXTt0aGVuIAogICAgICAgIHRtcF9pcDE9YGV4cHIgJHBkcF9pcDQgKyAxYAogICAgICAgIHRtcF9pcDI9YGV4cHIgJHBkcF9pcDQgKyAyYAogICAgICAgIHBzX2lwPSIkZnJvbnQzLiR0bXBfaXAxIgogICAgICAgIGJyX2lwPSIkZnJvbnQzLiR0bXBfaXAyIgogICAgZWxpZiAgWyAkcGRwX2lwNCAtZXEgMjU0IF07dGhlbgoJCXRtcF9pcDE9YGV4cHIgJHBkcF9pcDQgLSAyYAoJCXRtcF9pcDI9YGV4cHIgJHBkcF9pcDQgLSAxYAoJCXBzX2lwPSIkZnJvbnQzLiR0bXBfaXAxIgoJCWJyX2lwPSIkZnJvbnQzLiR0bXBfaXAyIgoJZWxzZQoJCXRtcF9pcDE9YGV4cHIgJHBkcF9pcDQgLSAxYAoJCXRtcF9pcDI9YGV4cHIgJHBkcF9pcDQgKyAxYAoJCXBzX2lwPSIkZnJvbnQzLiR0bXBfaXAxIgoJCWJyX2lwPSIkZnJvbnQzLiR0bXBfaXAyIgogICAgZmkKCgludiBzZXQgJHBzX2lmIl9pcCI9JHBzX2lwCgl2YWxpZF9tYXNrPSIyNTUuMjU1LjAuMCIKfQoKZ2V0X25ldG1hc2soKQp7CiAgICBpcGFkZHI9JDEKICAgIGxhc3Q0PTAKICAgIGxhc3QzPTAKICAgIG1hcms9MAogICAgZnJhZz0wCiAgICAKICAgIGdldF92YWxpZG51bQogICAgZWNobyAkaXBhZGRyICRsYXN0NCAkbGFzdDMgJG1hcmsgJGZyYWcKICAgICO9q9PQ0Ke2ztbQ09DQp8671sPOqjGjrLjDzrvX87HftrzWw86qMAogICAgdmFsaWRfbnVtPTAKICAgIAogICAgaWYgWyAkbWFyayAtZXEgMSAtYSAkbGFzdDMgLWVxIDAgXTt0aGVuCiAgICAgICAgdmFsaWRfbnVtPWBleHByICRsYXN0NCArIDFgCiAgICBlbGlmIFsgJG1hcmsgLWVxIDAgLWEgJGxhc3QzIC1lcSAwIF07dGhlbgogICAgICAgIHZhbGlkX251bT0kbGFzdDQKICAgIGVsaWYgWyAkbWFyayAtZXEgMSAtYSAkbGFzdDMgLW5lIDAgXTt0aGVuCiAgICAgICAgdmFsaWRfbnVtPWBleHByICRsYXN0MyArIDFgCiAgICBlbGlmIFsgJG1hcmsgLWVxIDAgLWEgJGxhc3QzIC1uZSAwIF07dGhlbgogICAgICAgIHZhbGlkX251bT0kbGFzdDMKICAgIGZpCiAgICBlY2hvICAkdmFsaWRfbnVtCiAgICAjtNPX88/y09LV0rW909DQp7bO1tC12tK7uPYxtcTOu9bDCiAgICBwbGFjZT0xCiAgICB3aGlsZSBbIGBleHByICR2YWxpZF9udW0gJSAyYCAtZXEgMCBdCiAgICBkbwogICAgICAgIHBsYWNlPWBleHByICRwbGFjZSArIDFgCiAgICAgICAgdmFsaWRfbnVtPWBleHByICR2YWxpZF9udW0gLyAyYAogICAgZG9uZQoKICAgIGlmIFsgJGxhc3QzIC1lcSAwIF0KICAgIHRoZW4KICAgICAgICBmcmFnPWBleHByICRmcmFnIC0gMWAKICAgIGZpCiAgICBjb3VudD0xCiAgICAKICAgIGlmIFsgJHBsYWNlIC1ndCA4IF0KICAgIHRoZW4KICAgICAgICBwbGFjZT1gZXhwciAkcGxhY2UgLSA4YAogICAgICAgIGZyYWc9YGV4cHIgJGZyYWcgKyAxYAogICAgZmkKCiAgICB0bXBfcGxhY2U9JHBsYWNlCiAgICB3aGlsZSBbICR0bXBfcGxhY2UgLWd0IDAgXQogICAgZG8KICAgICAgICBjb3VudD1gZXhwciAkY291bnQgXCogMmAKICAgICAgICB0bXBfcGxhY2U9YGV4cHIgJHRtcF9wbGFjZSAtIDFgCiAgICBkb25lCgogICAgI9bBydnQ6NKqyP249tPQ0KdpcLXY1rejqHBzv9qjrHBjo6zN+LnYo6mjrNHawuvX7rTzzqoyNTUuMjU1LjI1NS4yNDgKICAgIGlmIFsgJGZyYWcgLWVxIDAgIC1hICAkcGxhY2UgLWVxIDIgXQogICAgdGhlbgogICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDNgCiAgICBlbHNlCiAgICAgICAgY291bnQ9YGV4cHIgJGNvdW50IC0gMWAKICAgIGZpCgogICAgYmVmb3JlPSRmcmFnCiAgICAKICAgIHdoaWxlIFsgJGJlZm9yZSAtbHQgMyBdCiAgICBkbwogICAgICAgIHZhbGlkX21hc2s9JHZhbGlkX21hc2siMjU1LiIKICAgICAgICBiZWZvcmU9YGV4cHIgJGJlZm9yZSArIDFgCiAgICBkb25lCiAgICAgICAgdmFsaWRfbWFzaz0kdmFsaWRfbWFzayJgZXhwciAyNTUgLSAkY291bnRgIgogICAgd2hpbGUgWyAkZnJhZyAtZ3QgMCBdCiAgICBkbwogICAgICAgIHZhbGlkX21hc2s9JHZhbGlkX21hc2siLjAiCiAgICAgICAgZnJhZz1gZXhwciAkZnJhZyAtIDFgCiAgICBkb25lCgogICAgcGRwaXA9JDEKICAgIHBkcF9pcDQ9JHtwZHBpcCMjKi59CiAgICBwZHBfaXA0X3RtcD0kcGRwX2lwNAogICAgZnJvbnQzPSR7cGRwaXAlLip9CiAgICAKICAgIHRtcF9jb3VudD0wCiAgICBjb21fbnVtPTAKICAgIHdoaWxlIFsgJHRtcF9jb3VudCAtbHQgMyBdCiAgICBkbwogICAgICAgIHZhbGlkX2NvdW50PTAKICAgICAgICAKICAgICAgICBpZiBbIGBleHByICRwZHBfaXA0X3RtcCAlIDJgIC1lcSAxIF0KICAgICAgICB0aGVuCiAgICAgICAgICAgIHRtcF9jb3VudDE9JHRtcF9jb3VudAogICAgICAgICAgICB2YWxpZF9jb3VudD0xCiAgICAgICAgICAgIHdoaWxlIFsgJHRtcF9jb3VudDEgLWd0IDAgXQogICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgdmFsaWRfY291bnQ9YGV4cHIgJHZhbGlkX2NvdW50IFwqIDJgCiAgICAgICAgICAgICAgICB0bXBfY291bnQxPWBleHByICR0bXBfY291bnQxIC0gMWAKICAgICAgICAgICAgZG9uZQogICAgICAgIGZpCiAgICAgICAgY29tX251bT1gZXhwciAkY29tX251bSArICR2YWxpZF9jb3VudGAKICAgICAgICB0bXBfY291bnQ9YGV4cHIgJHRtcF9jb3VudCArIDFgCiAgICAgICAgcGRwX2lwNF90bXA9YGV4cHIgJHBkcF9pcDRfdG1wIC8gMmAKICAgIGRvbmUKICAgIGVjaG8gY29tX251bSAkY29tX251bQogICAgCiAgICBpZiBbICRjb21fbnVtIC1ndCAyIF0KICAgIHRoZW4gCiAgICAgICAgdG1wX2lwMT1gZXhwciAkcGRwX2lwNCAtIDFgCiAgICAgICAgdG1wX2lwMj1gZXhwciAkcGRwX2lwNCAtIDJgCiAgICAgICAgcHNfaXA9IiRmcm9udDMuJHRtcF9pcDEiCiAgICAgICAgYnJfaXA9IiRmcm9udDMuJHRtcF9pcDIiCiAgICBlbHNlCiAgICAgICAgdG1wX2lwMT1gZXhwciAkcGRwX2lwNCArIDFgCiAgICAgICAgdG1wX2lwMj1gZXhwciAkcGRwX2lwNCArIDJgCiAgICAgICAgcHNfaXA9IiRmcm9udDMuJHRtcF9pcDEiCiAgICAgICAgYnJfaXA9IiRmcm9udDMuJHRtcF9pcDIiCiAgICBmaQoKICAgIGVjaG8gcHNfaXAgJHBzX2lwIGJyX2lwICRicl9pcCB2YWxpZF9tYXNrICR2YWxpZF9tYXNrCiAgICBudiBzZXQgJHBzX2lmIl9pcCI9JHBzX2lwCn0KI7vxyKFpcLKixeTWw3BzoaJldGgKZ2V0X2lwYWRkcigpCnsKICAgIHBkcF9pcD1gbnYgZ2V0ICRwc19pZiJfcGRwX2lwImAKI8XQts/Kx7fKx/FidHJ1bmvQzbrFu/oJCglidHJ1bms9YGNhdCAvc3lzL21vZHVsZS9mYXN0X2NvbW1vbi9wYXJhbWV0ZXJzL2J0cnVua19md2AKCWlmIFsgIiRidHJ1bmsiIC1lcSAiMCIgXTt0aGVuCgkJZ2V0X25ldG1hc2sgJHBkcF9pcAogICAgZWxzZQoJCWdldF9uZXRtYXNrX2J0cnVuayAkcGRwX2lwCglmaQoJCglpZmNvbmZpZyAkcHNfaWYgJHBzX2lwIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB1cCAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGlmY29uZmlnICRwc19pZiAkcHNfaXAgdXAgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQoJbnYgc2V0IGRlZmF1bHRfd2FuX3JlbD0kcHNfaWYKCW52IHNldCBkZWZhdWx0X2NpZD0kY19pZAoJbnYgc2V0ICRleHRfYnIiX2lwIj0kYnJfaXAKCWlmY29uZmlnICRleHRfYnIgJGJyX2lwIDI+PiR0ZXN0X2xvZwoJaWYgWyAkPyAtbmUgMCBdO3RoZW4KCSAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJGV4dF9iciAkYnJfaXAgdXAgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQp9CiPCt9PJuebU8qOscHPT62V0aLy2waoKcm91dGVfc2V0KCkKewogICAgbWFya251bT1gZXhwciAkY19pZCArIDIwYAogICAgaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgLWkgJHBzX2lmIC1qIE1BUksgLS1zZXQtbWFyayAkbWFya251bQoJcnRfbnVtPWBleHByICRjX2lkICsgMTIwYAogICAgCiAgICBpcCByb3V0ZSBhZGQgZGVmYXVsdCBkZXYgJGV4dF9iciB0YWJsZSAkcnRfbnVtIAkKCQkKCWlwIHJ1bGUgYWRkIHRvICRwZHBfaXAgZndtYXJrICRtYXJrbnVtIHRhYmxlICRydF9udW0KCQoJbWFya251bT1gZXhwciAkY19pZCArIDEwYAogICAgaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgLWkgJGV4dF9iciAtaiBNQVJLIC0tc2V0LW1hcmsgJG1hcmtudW0KCXJ0X251bT1gZXhwciAkY19pZCArIDEwMGAKCiAgICBpcCByb3V0ZSBhZGQgZGVmYXVsdCBkZXYgJHBzX2lmIHRhYmxlICRydF9udW0KCWlwIHJ1bGUgYWRkIGZyb20gJHBkcF9pcCBmd21hcmsgJG1hcmtudW0gdGFibGUgJHJ0X251bQoKCWlwIHJvdXRlIGZsdXNoIGNhY2hlCiAgICAKICAgICOxvrXYzfjC58Xk1sMKICAgIGlwdGFibGVzIC10IG5hdCAtSSBQT1NUUk9VVElORyAtcyAkcHNfaXAgLW8gJHBzX2lmIC1qIFNOQVQgLS10byAkcGRwX2lwCiAgICAKCXJvdXRlX2luZm89YHJvdXRlfGdyZXAgZGVmYXVsdGAKCQoJaWYgWyAiJHJvdXRlX2luZm8iID09ICIiIF07dGhlbgoJCXJvdXRlIGFkZCBkZWZhdWx0IGRldiAkcHNfaWYKCWVsc2UKCQllY2hvICJEZWJ1ZzogZGVmYXVsdCByb3V0ZSBhbHJlYWR5IGV4aXN0LiIgPj4gJHRlc3RfbG9nCglmaQp9CiO5ub2ozfjHxQpicl91cCgpCnsKICAgIGJyPSJiciIkY19pZAogICAgYnJjdGwgYWRkYnIgJGJyCiAgICBicmN0bCBzZXRmZCAkYnIgMC4xCiAgICBpZmNvbmZpZyAkYnIgdXAgMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBpZmNvbmZpZyAkYnIgdXAgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQoJCglpZmNvbmZpZyAkcHNfaWYgdXAgMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBpZmNvbmZpZyAkcHNfaWYgdXAgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQogICAgYnJjdGwgYWRkaWYgJGJyICRwc19pZiAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGJyY3RsIGFkZGlmICRiciAkcHNfaWYgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQogICAgYnJjdGwgYWRkaWYgJGJyICRldGhfaWYgMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBicmN0bCBhZGRpZiAkYnIgJGV0aF9pZiBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCglpZmNvbmZpZyAkZXRoX2lmIHVwIDI+PiR0ZXN0X2xvZwoJaWYgWyAkPyAtbmUgMCBdO3RoZW4KCSAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJGV0aF9pZiB1cCBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCgkgICAKfQojyb6z/c34x8UKYnJfZG93bigpCnsKICAgIGJyPSJiciIkY19pZAoJYnJjdGwgZGVsaWYgJGJyICRldGhfaWYgMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBicmN0bCBkZWxpZiAkYnIgJGV0aF9pZiBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCglpZmNvbmZpZyAkZXRoX2lmIGRvd24gMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBpZmNvbmZpZyAkZXRoX2lmIGRvd24gZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQoJYnJjdGwgZGVsaWYgJGJyICRwc19pZiAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGJyY3RsIGRlbGlmICRiciAkcHNfaWYgZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQoJaWZjb25maWcgJHBzX2lmIGRvd24gMj4+JHRlc3RfbG9nCglpZiBbICQ/IC1uZSAwIF07dGhlbgoJICAgIGVjaG8gIkVycm9yOiBpZmNvbmZpZyAkcHNfaWYgZG93biBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCiAgICBpZmNvbmZpZyAkYnIgZG93biAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGlmY29uZmlnICRiciBkb3duIGZhaWxlZC4iID4+ICR0ZXN0X2xvZwogICAgZmkKICAgIGJyY3RsIGRlbGJyICRiciAyPj4kdGVzdF9sb2cKCWlmIFsgJD8gLW5lIDAgXTt0aGVuCgkgICAgZWNobyAiRXJyb3I6IGJyY3RsIGRlbGJyICRiciBmYWlsZWQuIiA+PiAkdGVzdF9sb2cKICAgIGZpCn0KI8mxy8C21NOmtcRESENQvfizzApkaGNwX2tpbGwoKQp7CiAgICBwaWRmaWxlPSRwYXRoX2NvbmYiL3VkaGNwZCIkY19pZCIucGlkIgoJa2lsbCBgY2F0ICRwaWRmaWxlYAp9CiPJvrP9ttTTprXEwrfTybnm1PIKcm91dGVfZGVsKCkKewogICAgcGRwX2lwPWBudiBnZXQgJHBzX2lmIl9wZHBfaXAiYAojCXBzX2lwMT0ke3BkcF9pcCUuKn0KIwlwc19pcDI9JHtwZHBfaXAjIyoufQojCVsgIiRwc19pcDIiIC1nZSAiMjU0IiBdICYmIHsgcHNfaXAyPSIyNTAiOyB9CiMJcHNfaXAyPWBleHByICRwc19pcDIgKyAxYAoJcHNfaXA9YG52IGdldCAkcHNfaWYiX2lwImAKCWJyX2lwPWBudiBnZXQgJGV4dF9iciJfaXAiYAoJbWFya251bT1gZXhwciAkY19pZCArIDEwYAoJcnRfbnVtPWBleHByICRjX2lkICsgMTAwYAoJCglpcHRhYmxlcyAtdCBtYW5nbGUgLUQgUFJFUk9VVElORyAtaSAkZXh0X2JyIC1qIE1BUksgLS1zZXQtbWFyayAkbWFya251bQoJaXAgcnVsZSBkZWwgZnJvbSAkcGRwX2lwIGZ3bWFyayAkbWFya251bSB0YWJsZSAkcnRfbnVtIAogICAgaXAgcm91dGUgZGVsIGRlZmF1bHQgZGV2ICRwc19pZiB0YWJsZSAkcnRfbnVtCgkKICAgIG1hcmtudW09YGV4cHIgJGNfaWQgKyAyMGAKCXJ0X251bT1gZXhwciAkY19pZCArIDEyMGAKICAgIGlwdGFibGVzIC10IG1hbmdsZSAtRCBQUkVST1VUSU5HIC1pICRwc19pZiAtaiBNQVJLIC0tc2V0LW1hcmsgJG1hcmtudW0KCWlwIHJ1bGUgZGVsIHRvICRwZHBfaXAgZndtYXJrICRtYXJrbnVtIHRhYmxlICRydF9udW0KICAgIGlwIHJvdXRlIGRlbCBkZWZhdWx0IGRldiAkZXh0X2JyIHRhYmxlICRydF9udW0gCgkjsb612M34wufF5NbDCiAgICBpcHRhYmxlcyAtdCBuYXQgLUQgUE9TVFJPVVRJTkcgLXMgJHBzX2lwIC1vICRwc19pZiAtaiBTTkFUIC0tdG8gJHBkcF9pcAogICAgaWYgWyAkPyAtbmUgMCBdO3RoZW4KICAgICAgICBlY2hvICJjbWQgPDxpcHRhYmxlcyAtdCBuYXQgLUQgUE9TVFJPVVRJTkcgLXMgJHBzX2lwIC1vICRwc19pZiAtaiBTTkFUIC0tdG8gJHBkcF9pcD4+IGV4ZWMgZmFpbGVkIiAgPj4gJHRlc3RfbG9nCiAgICBmaQogICAgcm91dGUgZGVsZXRlIGRlZmF1bHQgZGV2ICRwc19pZgogICAgaWYgWyAkPyAtbmUgMCBdO3RoZW4KICAgICAgICBlY2hvICJjbWQgPDxyb3V0ZSBkZWxldGUgZGVmYXVsdCBkZXYgJHBzX2lmPj4gZXhlYyBmYWlsZWQiICA+PiAkdGVzdF9sb2cKICAgIGZpCgkKICAgIGlmY29uZmlnICRleHRfYnIgMC4wLjAuMAoJaWZjb25maWcgJGV4dF9iciBkb3duIDI+PiR0ZXN0X2xvZwoJaWYgWyAkPyAtbmUgMCBdO3RoZW4KCSAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJGV4dF9iciBkb3duIGZhaWxlZC4iID4+ICR0ZXN0X2xvZwogICAgZmkKICAgIAogICAgaWZjb25maWcgJHBzX2lmIDAuMC4wLjAKCWlmY29uZmlnICRwc19pZiBkb3duIDI+PiR0ZXN0X2xvZwoJaWYgWyAkPyAtbmUgMCBdO3RoZW4KCSAgICBlY2hvICJFcnJvcjogaWZjb25maWcgJHBzX2lmIGRvd24gZmFpbGVkLiIgPj4gJHRlc3RfbG9nCiAgICBmaQoJCiAgICAjcmVzZXQgbnYKICAgIG52IHNldCAkZXh0X2JyIl9pcCI9MC4wLjAuMAogICAgbnYgc2V0ICRleHRfYnIiX25tIj0wLjAuMC4wCiAgICBudiBzZXQgJHBzX2lmIl9wZHBfaXAiPTAuMC4wLjAKICAgIG52IHNldCAkcHNfaWYiX3ByaWRucyI9MC4wLjAuMAogICAgbnYgc2V0ICRwc19pZiJfc2VjZG5zIj0wLjAuMC4wCiAgICBudiBzZXQgJHBzX2lmIl9pcCI9MC4wLjAuMAp9CgppZiBbICItJDEiID09ICItbGlua3VwIiBdOyB0aGVuCgltdHU9YG52IGdldCBtdHVgCglpZmNvbmZpZyAkcHNfaWYgbXR1ICRtdHUKCWlmIFsgIi0kcHNfZXh0X21vZGUiID09ICItMSIgXTsgdGhlbgogICAgICAgIGJyY3RsIGFkZGJyICRleHRfYnIKICAgICAgICBicmN0bCBzZXRmZCAkZXh0X2JyIDAuMQogICAgICAgIGJyY3RsIGFkZGlmICRleHRfYnIgJGV0aF9pZgogICAgICAgIGlmY29uZmlnICRleHRfYnIgdXAKICAgICAgICBnZXRfaXBhZGRyCgkJZGhjcF9zZXQKCSAgICByb3V0ZV9zZXQKCQlhcnBfcHJveHlfc2V0CiAgICAgICAgaWZjb25maWcgJGV0aF9pZiB1cAoJaXNtYmltPWBwcyB8Z3JlcCAtdiBncmVwIHxncmVwIC13IG1iaW0gfGF3ayAne3ByaW50ZiAkMX0nYAoJaWYgWyAiLSRpc21iaW0iICE9ICItIiBdOyB0aGVuCgkJZXRoX21hYz1gY2F0ICIvc3lzL2NsYXNzL25ldC8iJGV0aF9pZiIvYWRkcmVzcyJgCgkJYXJwIC1zICRwZHBfaXAgJGV0aF9tYWMgMj4+JHRlc3RfbG9nCglmaQoJCXRjX3RiZi5zaCB1cCAkY19pZAoJZWxpZiBbICItJHBzX2V4dF9tb2RlIiA9PSAiLTAiIF07IHRoZW4KCSAgICBicl91cAoJZmkJCmVsaWYgWyAiLSQxIiA9PSAiLWxpbmtkb3duIiBdOyB0aGVuCiAgICBpZiBbICItJHBzX2V4dF9tb2RlIiA9PSAiLTEiIF07IHRoZW4KCQl0Y190YmYuc2ggZG93biAkY19pZAoJCWFycF9wcm94eV9raWxsCiAgICAgICAgZGhjcF9raWxsCgkgICAgcm91dGVfZGVsCiAgICAgICAgaWZjb25maWcgJGV0aF9pZiBkb3duCiAgICAgICAgaWZjb25maWcgJGV4dF9iciBkb3duCiAgICAgICAgYnJjdGwgZGVsaWYgJGV4dF9iciAkZXRoX2lmCiAgICAgICAgYnJjdGwgZGVsYnIgJGV4dF9iciAKICAgICAgICBlY2hvICIiID4gL2V0Yy9yZXNvbHYuY29uZgoJZWxpZiBbICItJHBzX2V4dF9tb2RlIiA9PSAiLTAiIF07IHRoZW4KCSAgICBicl9kb3duCglmaQkKZmkK