ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKaW5kZXggZTUyZWMwZi4uYzg2NjkwYSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKQEAgLTgwLDcgKzgwLDE1IEBACiAgIHdoaWxlKHNpemUtLSA+IDApCiAgIHsKICAgICBzcF91bnBhY2tfdmFsdWUoJnVucGFjaywmZmllbGQpOwotICAgIGlmKElTX0tFWShQS19JTlRfV0FURVJMSU1JVCxmaWVsZC5rZXkpKQorICAgIGlmKElTX0tFWShQS19JTlRfUEVSTUlULCBmaWVsZC5rZXkpKQorICAgIHsKKyAgICAgIGNhcmQtPnBlcm1pdCA9IGZpZWxkLnZhbC5pbnR2YWw7CisgICAgfQorICAgIGVsc2UgaWYoSVNfS0VZKFBLX1NUUl9MSU1JVE1TRywgZmllbGQua2V5KSkKKyAgICB7CisgICAgICBNRU1DUFkoY2FyZC0+bGltaXRtc2csIGZpZWxkLnZhbC5zdHJ2YWwsIGZpZWxkLnN0cmxlbik7CisgICAgfQorICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9XQVRFUkxJTUlULGZpZWxkLmtleSkpCiAgICAgewogICAgICAgY2FyZC0+d2F0ZXJsaW1pdCA9IGZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQpAQCAtMjcwLDcgKzI3OCwxMSBAQAogICB3aGlsZShzaXplLS0gPiAwKQogICB7CiAgICAgc3BfdW5wYWNrX3ZhbHVlKCZ1bnBhY2ssJmZpZWxkKTsKLSAgICBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLCBmaWVsZC5rZXkpKQorICAgIGlmKElTX0tFWShQS19JTlRfUEVSTUlULCBmaWVsZC5rZXkpKQorICAgIHsKKyAgICAgIGNhcmQtPnBlcm1pdCA9IGZpZWxkLnZhbC5pbnR2YWw7CisgICAgfQorICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9DT0JJTExOTywgZmllbGQua2V5KSkKICAgICB7CiAgICAgICBjYXJkLT5jb2JpbGxubyA9IGZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQpAQCAtMjk0LDYgKzMwNiwxMCBAQAogICAgIHsKICAgICAgIGNhcmQtPmZlZXBhcmEuZmVlX3VuaXQgPSBmaWVsZC52YWwuaW50dmFsOwogICAgIH0KKyAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfV0FURVJMSU1JVCwgZmllbGQua2V5KSkKKyAgICB7CisgICAgICBjYXJkLT53YXRlcmxpbWl0ID0gZmllbGQudmFsLmludHZhbDsKKyAgICB9CiAgIH0KICAgcmV0dXJuIHJlc3AucmV0Y29kZTsKIH0KQEAgLTU1OCwyMyArNTc0LDE2IEBACiAgIGlmKHRpY2tlciAtIHBvcy0+bGFzdF9jb21tX3N0YXR1cy5zZW5kdGltZSA+IENPTU1fV0FJVF9USU1FKQogICB7CiAgICAgaWYocG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlciA9PSAwIHx8IHBvcy0+ZGV2bG9naW4ubG9naW5fZmxhZyA9PSAwCi0JCXx8IHRpY2tlciAtIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPiBERUxBWV9USU1FNjBzKjMwKQorICAgICAgICB8fCB0aWNrZXIgLSBwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID4gREVMQVlfVElNRTYwcyozMCkKICAgICB7Ci0gICAgICBpZih0aWNrZXIgLSBwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID4gREVMQVlfVElNRTYwcyo2MCkKLSAgICAgIHsKICAgICAgICAgcG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlciA9IHRpY2tlcjsKICAgICAgICAgc3BfYXN5bmNfZXF1aXBtZW50X2xvZ2luKHBvcyk7Ci0gICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYodGlja2VyIDwgcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyCi0gICAgICAgICAgICB8fCBwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIgPT0gMAotICAgICAgICAgICAgfHwgdGlja2VyIC0gcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID4gREVMQVlfVElNRTE1cyoyKQorICAgIGlmKHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA9PSAwCisgICAgICAgIHx8IHRpY2tlciAtIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA+IERFTEFZX1RJTUU2MHMpCiAgICAgewotICAgICAgaWYodGlja2VyIC0gcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID4gREVMQVlfVElNRTYwcykKLSAgICAgIHsKICAgICAgICAgcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID0gdGlja2VyOwogICAgICAgICBzcF9hc3luY19oZWFydGJlYXQocG9zKTsKLSAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKaW5kZXggZGE0MjJmMy4uMzI1OGVmZiAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKQEAgLTc5LDYgKzc5LDggQEAKICNkZWZpbmUgUEtfSU5UX0FVVEhTVEFUVVMJCQkiMTUiCiAjZGVmaW5lIFBLX0lOVF9QQVlTVEFUVVMJCQkiMTYiCiAjZGVmaW5lIFBLX0lOVF9GRUVTVEFSVAkJCQkiMTciCisjZGVmaW5lIFBLX0lOVF9QRVJNSVQJCQkJIjE4IgorI2RlZmluZSBQS19TVFJfTElNSVRNU0cJCQkJIjE5IgogCiAjZGVmaW5lIFNQX0NNRF9VUEdSQURFIDB4MjAgICAgICAgICAJLy/U2s/fyf28tgogI2RlZmluZSBTUF9DTURfVFJBTlNEVExfQUNDT1VOVCAweDIyICAgIC8vvMfVy8H3y64KZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb25maWcuaCBiL3N1cHdpc2RvbS9zcF9jb25maWcuaAppbmRleCBiNTdhMDViLi45NDhlODZhIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfY29uZmlnLmgKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbmZpZy5oCkBAIC0yMzQsNiArMjM0LDggQEAKIAogICB1aW50OCB3YXRlcmxpbWl0OwkJLy+1pbTOs/bLrsnPz96jqDEwMG1so6kKICAgdWludDMyIGNvYmlsbG5vOwkJLy+9u9LXtqm1pbHgusUsQkNEwusKKyAgdWludDgJcGVybWl0OwkJCS8vyse38dTK0O3P+7fRo6wwLdTK0O2jrDEtsrvUytDtCisgIHVpbnQ4IGxpbWl0bXNnWzQ1XTsJCS8vz97Wxs/7t9HQxc+iCiAgIHNwX3FyY29kZV90IHFyY29kZTsJLy+2/s6swusKICAgc3BfZmVlcGFyYV90IGZlZXBhcmE7CiB9IHNwX2NhcmRfdDsKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb25zdGFudC5oIGIvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKaW5kZXggMzA4MWZjMC4uYTdkZDk1YiAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKQEAgLTU0LDUgKzU0LDcgQEAKICNkZWZpbmUgU1RBVFVTX0tFRVBPUEVOCQkJCQkxCS8vs6O/qr+oCiAjZGVmaW5lIFNUQVRVU19DTE9TRUQJCQkJCTAJLy/Ioc/7s6O/qr+oCiAKKyNkZWZpbmUgUkNfTElNSVRfQ09OU1VNUFRJT04JCQk3MAkvL8/e1sbP+7fRCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYwppbmRleCA0MDUyYmZkLi43MzdiMjVhIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jCisrKyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKQEAgLTI4NiwyNSArMjg2LDEwIEBACiAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWludDE2IGRvX3dvcmtfY2hlY2soY29uc3Qgc3BfcG9zX3QqIHBvcykKLXsKLSAgLy/F0LbPz/u30b3wtu7I57n7tPPT2jIwu/LV38Gs0PjP+7fRs6y5/TLQocqxo6zU8s2j1rmz9suuCi0gIGlmKHBvcy0+cHVyY2hhc2UudXNlZF9udW0gPj0gMTAwMCB8fCBwb3MtPnB1cmNoYXNlLnBhaWRfc3VtID49IDEwMDApCi0gIHsKLSAgICByZXR1cm4gUkNfQ0FSRF9USU1FT1VUOwotICB9Ci0gIHJldHVybiAwOwotfQotCiBzdGF0aWMgdWludDE2IGRvX3dvcmsoc3BfcG9zX3QqIHBvcywgc3BfY2FyZF90KiBjYXJkKQogewogICB1aW50MTYgcmV0ID0gMDsKICAgc3BfdmFsdmVfb24oKTsKLSAgcmV0ID0gZG9fd29ya19jaGVjayhwb3MpOwotICBpZihyZXQpCi0gIHsKLSAgICByZXR1cm4gcmV0OwotICB9CiAgIC8vvMbL48/7t9G98LbuCiAgIHJldCA9IHNwX2NhbGNfcGF5YW10X2J5X2Zsb3dzZW5zb3IocG9zLCBjYXJkKTsKICAgaWYocmV0KQpAQCAtNDY4LDcgKzQ1Myw3IEBACiAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1NUT1BQRUQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ0FSRFdPUktTVEFUVVNfU1RPUFBFRDoKLSAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfTk9ORTsKKyAgICBkaXNwX2hpbnRfaW5mbyhwb3MsICLH67DOv6giLCBERUxBWV9USU1FMnMpOwogICAgIGJyZWFrOwogICBjYXNlIENBUkRXT1JLU1RBVFVTX0ZFRUNBUkRfV09SS0lORzoKICAgICBpZihNRU1DTVAocG9zLT5jYXJkU3RhdGUuc25yLCBjYXJkLT5jYXJkcGh5aWQsIDQpICE9IDApCkBAIC00NzYsMTEgKzQ2MSw5IEBACiAgICAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfTk9ORTsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvL3Nob3dfbWVudV9vcHRpb25zKCk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ0FSRFdPUktTVEFUVVNfRVJST1I6CiAgICAgZG9fZXJyb3IocG9zLCBjYXJkV29ya1N0YXRlLT5lcnJjb2RlKTsKLSAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfTk9ORTsKICAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICBEZWxheV9tcyhERUxBWV9USU1FMjAwbXMpOwpAQCAtNjU3LDE5ICs2NDAsMjcgQEAKICAgICBicmVhazsKICAgY2FzZSBDQVJEV09SS1NUQVRVU19SRUFEWToKICAgICBDQVJELnFyY29kZS5ub3d0aW1lID0gc3BfZ2V0X3RpY2tlcigpOwotICAgIGlmKChDQVJELnFyY29kZS5ub3d0aW1lIC0gQ0FSRC5xcmNvZGUuc3RhcnR0aW1lKSA+IENBUkQucXJjb2RlLnZhbGlkdGltZSkKKyAgICBpZigoQ0FSRC5xcmNvZGUubm93dGltZSAtIENBUkQucXJjb2RlLnN0YXJ0dGltZSkgPCBDQVJELnFyY29kZS52YWxpZHRpbWUqREVMQVlfVElNRTFzKQogICAgIHsKICAgICAgIHNob3dfaG9tZShwb3MpOwogICAgICAgc2hvd19ob21lX3FyY29kZShDQVJELnFyY29kZS5xcmNvZGVfdXJsKTsKLSAgICAgIGlmKENBUkQucXJjb2RlLm5vd3RpbWUgLSB0aWNrID4gREVMQVlfVElNRTNzKQorICAgICAgaWYoQ0FSRC5xcmNvZGUubm93dGltZSAtIHRpY2sgPiBERUxBWV9USU1FMnMpCiAgICAgICB7CiAgICAgICAgIHRpY2sgPSBDQVJELnFyY29kZS5ub3d0aW1lOwogICAgICAgICByZXQgPSBzcF9xcmNvZGVfcXVlcnkocG9zLCAmQ0FSRCk7CiAgICAgICAgIGlmKCFyZXQgJiYgQ0FSRC5xcmNvZGUuYXV0aHN0YXR1cykKICAgICAgICAgewotICAgICAgICAgIGRvX3N0YXJ0KHBvcyk7Ci0gICAgICAgICAgY2FyZFdvcmtTdGF0ZS0+bGFzdF9zdGF0ZSA9IGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1dPUktJTkc7CisgICAgICAgICAgaWYoQ0FSRC5wZXJtaXQpCisgICAgICAgICAgeworICAgICAgICAgICAgY2FyZFdvcmtTdGF0ZS0+ZXJyY29kZSA9IFJDX0xJTUlUX0NPTlNVTVBUSU9OOworICAgICAgICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX0VSUk9SOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgZG9fc3RhcnQocG9zKTsKKyAgICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmxhc3Rfc3RhdGUgPSBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlOworICAgICAgICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1dPUktJTkc7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNjkyLDYgKzY4MywxMSBAQAogICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX0VSUk9SOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGlmKHBvcy0+cHVyY2hhc2UucGFpZF9udW0gPiBDQVJELndhdGVybGltaXQpCisgICAgeworICAgICAgZGlzcF9oaW50X2luZm8ocG9zLCAi0tG077WltM6z9suuyc/P3iIsIERFTEFZX1RJTUUycyk7CisgICAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfU1RPUFBJTkc7CisgICAgfQogICAgIGNhcmRXb3JrU3RhdGUtPmxhc3Rfc3RhdGUgPSBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlOwogICAgIGNhcmRXb3JrU3RhdGUtPnBhdXNlX3RpY2sgPSBzcF9nZXRfdGlja2VyKCk7CiAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfZGlzcGxheS5jIGIvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYwppbmRleCA2NzZlMjdkLi44NjBhNDUxIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfZGlzcGxheS5jCisrKyBiL3N1cHdpc2RvbS9zcF9kaXNwbGF5LmMKQEAgLTE2MiwxMjAgKzE2MiwxMjQgQEAKICAgc3dpdGNoKGVycmNvZGUpCiAgIHsKICAgY2FzZSBSQ19QU0FNX0VSUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiU0FNuLTOu8qnsNwiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIlNBTbi0zrvKp7DcIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9MT0dJTjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAi0enWpMPY1L/Kp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLR6dakw9jUv8qnsNwiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX1JFQUQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIrbBv6jKp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK2wb+oyqew3CIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfV1JJVEU6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgItC0v6jKp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLQtL+oyqew3CIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0ZMQVNIX0VSUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiRkxBU0jS7LOjIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICJGTEFTSNLss6MiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19IQVJEV0FSRV9FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIrnMvP7S7LOjIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK5zLz+0uyzoyIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0ZMQVNIX05PX1JJR0hUOgotICAgIHNwcmludGYobXNnLCIlcyIsICJGTEFTSM/e1sYiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIkZMQVNIz97WxiIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfTk9SSUdIVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiv6jO3sioz94iKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIr+ozt7IqM/eIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9FWFBJUkVEOgotICAgIHNwcmludGYobXNnLCIlcyIsICK/qNLRuf3G2iIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiv6jS0bn9xtoiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX0xPU1Q6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIr+o0tHL+LaoIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK/qNLRy/i2qCIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkROT19FWENFUFQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIr+o0uyzoyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiv6jS7LOjIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9USU1FT1VUOgotICAgIHNwcmludGYobXNnLCIlcyIsICLKudPDzKu+wyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiyrnTw8yrvsMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEQkFMX0VYQ0VQVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAi0+C27tLss6MiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgItPgtu7S7LOjIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSREJBTF9MQUNLOgotICAgIHNwcmludGYobXNnLCIlcyIsICLH68Gqu/rP+7fRIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLH68Gqu/rP+7fRIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfREVWUEhZSURfTk9UU0VUOgotICAgIHNwcmludGYobXNnLCIlcyIsICLOtMno1sO7+rrFIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLOtMno1sO7+rrFIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfRkVFUkFURV9OT1RTRVQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIs60yejWw7fRwsoiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIs60yejWw7fRwsoiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19ERVZfT0ZGTElORV9FUlJPUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiyeixuM3Ru/rMq77DIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLJ6LG4zdG7+syrvsMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19UUkFOU0RUTF9GVUxMOgotICAgIHNwcmludGYobXNnLCIlcyIsICLB98uu0tHC+iIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiwffLrtLRwvoiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19GSUxFMDlfQ1JDX0VSUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiMDlDUkO07c7zIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICIwOUNSQ7TtzvMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19GSUxFMTBfQ1JDX0VSUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiMTBDUkO07c7zIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICIxMENSQ7TtzvMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX0lOVkFMSUQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIs7e0Ke/qCIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAizt7Qp7+oIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfRkVFTlVNX0VSUk9SOgotICAgIHNwcmludGYobXNnLCIlcyIsICK30cLKuPbK/bTtzvMiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrfRwsq49sr9tO3O8yIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX05PVFNVUFBPUlQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIrK71qez1iIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAisrvWp7PWIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfTk9UX1NBTUVfQ0FSRDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAisrvNrL+oIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICKyu82sv6giKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19NT0RFX05PVF9TVVBQT1JUOgotICAgIHNwcmludGYobXNnLCIlcyIsICLEo8q9srvWp7PWIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLEo8q9srvWp7PWIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfVVBEUFJPR19FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIsn9vLbKp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLJ/by2yqew3CIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NPTkZQQVJBX0NSQ19FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIsXk1sNDUkO07c7zIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLF5NbDQ1JDtO3O8yIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX1RSQU5TRFRMX05PX0VSUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiwffLrrrF0uyzoyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiwffLrrrF0uyzoyIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0RFVklDRU5PX09VVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiu/q6xbn9tPMiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrv6usW5/bTzIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfUVJDT0RFX0ZBSUxVUkU6Ci0gIAlzcHJpbnRmKG1zZywiJXMiLCAitv7OrMLru/HIocqnsNwiKTsKLQlicmVhazsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrb+zqzC67vxyKHKp7DcIik7CisgICAgYnJlYWs7CiAgIGNhc2UgUkNfUVJDT0RFX1RJTUVPVVQ6Ci0gIAlzcHJpbnRmKG1zZywiJXMiLCAitv7OrMLrs6zKsSIpOwotCWJyZWFrOworICAgIHNwcmludGYobXNnLCAiJXMiLCAitv7OrMLrs6zKsSIpOworICAgIGJyZWFrOwogICBjYXNlIFJDX1FSQ09ERV9RVUVSWV9GQUlMOgotICAJc3ByaW50Zihtc2csIiVzIiwgIrb+zqzC68jP1qTKp7DcIik7Ci0JYnJlYWs7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK2/s6swuvIz9akyqew3CIpOworICAgIGJyZWFrOwogICBjYXNlIFJDX0RFVl9OT1RfTE9HSU46Ci0gIAlzcHJpbnRmKG1zZywiJXMiLCAiyeixuM60x6m1vSIpOwotCWJyZWFrOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiyeixuM60x6m1vSIpOworICAgIGJyZWFrOwogICBjYXNlIFJDX0RFVl9GQVVMVDoKLSAgCXNwcmludGYobXNnLCIlcyIsICLJ6LG40snLxrnK1c8iKTsKLQlicmVhazsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsnosbjSycvGucrVzyIpOworICAgIGJyZWFrOwogICBjYXNlIFJDX0RFVl9OT1NFVF9GTE9XU0VOU09SX1VOSVQ6Ci0gIAlzcHJpbnRmKG1zZywiJXMiLCAiwffBv7zGy+O1pc67zrTJ6NbDIik7Ci0JYnJlYWs7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLB98G/vMbL47WlzrvOtMno1sMiKTsKKyAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX0FVVEhFTlRJQ0FUSU9OOgotICAJc3ByaW50Zihtc2csIiVzIiwgIr+oyM/WpMqnsNwiKTsKLQlicmVhazsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIr+oyM/WpMqnsNwiKTsKKyAgICBicmVhazsKKyAgY2FzZSBSQ19MSU1JVF9DT05TVU1QVElPTjoKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrjD08O7p7G7z97Wxs/7t9EiKTsKKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICBzcHJpbnRmKG1zZywitO3O88LrPTB4JTA0eCIsZXJyY29kZSk7CiAgIH0KICAgZGlzcF9oaW50X2luZm9fdHdvKHBvcyxoaW50LG1zZyxERUxBWV9USU1FM3MpOwogfQogCi12b2lkIGRpc3BfaGludF9pbmZvX3RocmVlKHNwX3Bvc190KiBwb3MsY29uc3QgY2hhciogbXNnMSxjb25zdCBjaGFyKiBtc2cyLGNvbnN0IGNoYXIqIG1zZzMsdWludDMyIG1zKQordm9pZCBkaXNwX2hpbnRfaW5mb190aHJlZShzcF9wb3NfdCogcG9zLGNvbnN0IGNoYXIqIG1zZzEsY29uc3QgY2hhciogbXNnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbXNnMyx1aW50MzIgbXMpCiB7CiAgIHNob3dfdGl0bGUoKTsKICAgc2hvd19ib3R0b20ocG9zKTsK