ZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9Db25maWd1cmUgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvQ29uZmlndXJlCi0tLSBvcGVuc3NsLTEuMC4yai9Db25maWd1cmUJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL0NvbmZpZ3VyZQkyMDE2LTExLTMwIDEwOjE1OjU0LjgyNzA3MjQ1MCAtMDUwMApAQCAtMTUwLDI1ICsxNTAsMjUgQEAKIG15ICRiaXRzMT0iVEhJUlRZX1RXT19CSVQgIjsKIG15ICRiaXRzMj0iU0lYVFlfRk9VUl9CSVQgIjsKIAotbXkgJHg4Nl9hc209Ing4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubyB4ODYtZ2YybS5vOjpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXMtNTg2Lm8gdnBhZXMteDg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubzpnaGFzaC14ODYubzoiOworbXkgJHg4Nl9hc209Ing4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubyB4ODYtZ2YybS5vOjpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXMtNTg2Lm8gdnBhZXMteDg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubzpnaGFzaC14ODYubzo6IjsKIAogbXkgJHg4Nl9lbGZfYXNtPSIkeDg2X2FzbTplbGYiOwogCi1teSAkeDg2XzY0X2FzbT0ieDg2XzY0Y3B1aWQubzp4ODZfNjQtZ2NjLm8geDg2XzY0LW1vbnQubyB4ODZfNjQtbW9udDUubyB4ODZfNjQtZ2YybS5vIHJzYXpfZXhwLm8gcnNhei14ODZfNjQubyByc2F6LWF2eDIubzplY3BfbmlzdHoyNTYubyBlY3BfbmlzdHoyNTYteDg2XzY0Lm86OmFlcy14ODZfNjQubyB2cGFlcy14ODZfNjQubyBic2Flcy14ODZfNjQubyBhZXNuaS14ODZfNjQubyBhZXNuaS1zaGExLXg4Nl82NC5vIGFlc25pLXNoYTI1Ni14ODZfNjQubyBhZXNuaS1tYi14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubyBzaGExLW1iLXg4Nl82NC5vIHNoYTI1Ni1tYi14ODZfNjQubzo6cmM0LXg4Nl82NC5vIHJjNC1tZDUteDg2XzY0Lm86Ojp3cC14ODZfNjQubzpjbWxsLXg4Nl82NC5vIGNtbGxfbWlzYy5vOmdoYXNoLXg4Nl82NC5vIGFlc25pLWdjbS14ODZfNjQubzoiOwotbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm8gaWE2NC1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6cmM0LWlhNjQubyByYzRfc2tleS5vOjo6OjpnaGFzaC1pYTY0Lm86OnZvaWQiOwotbXkgJHNwYXJjdjlfYXNtPSJzcGFyY3Y5Y2FwLm8gc3BhcmNjcHVpZC5vOmJuLXNwYXJjdjkubyBzcGFyY3Y5LW1vbnQubyBzcGFyY3Y5YS1tb250Lm8gdmlzMy1tb250Lm8gc3BhcmN0NC1tb250Lm8gc3BhcmN2OS1nZjJtLm86OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vIGRlc3Q0LXNwYXJjdjkubzphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtc3BhcmN2OS5vIGFlc3Q0LXNwYXJjdjkubzo6bWQ1LXNwYXJjdjkubzpzaGExLXNwYXJjdjkubyBzaGEyNTYtc3BhcmN2OS5vIHNoYTUxMi1zcGFyY3Y5Lm86Ojo6OjpjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbGxfY2JjLm8gY21sbHQ0LXNwYXJjdjkubzpnaGFzaC1zcGFyY3Y5Lm86OnZvaWQiOwotbXkgJHNwYXJjdjhfYXNtPSI6c3BhcmN2OC5vOjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKLW15ICRhbHBoYV9hc209ImFscGhhY3B1aWQubzpibl9hc20ubyBhbHBoYS1tb250Lm86Ojo6OjpzaGExLWFscGhhLm86Ojo6Ojo6Z2hhc2gtYWxwaGEubzo6dm9pZCI7Ci1teSAkbWlwczY0X2FzbT0iOmJuLW1pcHMubyBtaXBzLW1vbnQubzo6OmFlc19jYmMubyBhZXMtbWlwcy5vOjo6c2hhMS1taXBzLm8gc2hhMjU2LW1pcHMubyBzaGE1MTItbWlwcy5vOjo6Ojo6OjoiOworbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm8geDg2XzY0LW1vbnQ1Lm8geDg2XzY0LWdmMm0ubyByc2F6X2V4cC5vIHJzYXoteDg2XzY0Lm8gcnNhei1hdngyLm86ZWNwX25pc3R6MjU2Lm8gZWNwX25pc3R6MjU2LXg4Nl82NC5vOjphZXMteDg2XzY0Lm8gdnBhZXMteDg2XzY0Lm8gYnNhZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm8gYWVzbmktc2hhMS14ODZfNjQubyBhZXNuaS1zaGEyNTYteDg2XzY0Lm8gYWVzbmktbWIteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm8gc2hhMS1tYi14ODZfNjQubyBzaGEyNTYtbWIteDg2XzY0Lm86OnJjNC14ODZfNjQubyByYzQtbWQ1LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzpnaGFzaC14ODZfNjQubyBhZXNuaS1nY20teDg2XzY0Lm86OiI7CitteSAkaWE2NF9hc209ImlhNjRjcHVpZC5vOmJuLWlhNjQubyBpYTY0LW1vbnQubzo6OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vIHJjNF9za2V5Lm86Ojo6OmdoYXNoLWlhNjQubzo6OnZvaWQiOworbXkgJHNwYXJjdjlfYXNtPSJzcGFyY3Y5Y2FwLm8gc3BhcmNjcHVpZC5vOmJuLXNwYXJjdjkubyBzcGFyY3Y5LW1vbnQubyBzcGFyY3Y5YS1tb250Lm8gdmlzMy1tb250Lm8gc3BhcmN0NC1tb250Lm8gc3BhcmN2OS1nZjJtLm86OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vIGRlc3Q0LXNwYXJjdjkubzphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtc3BhcmN2OS5vIGFlc3Q0LXNwYXJjdjkubzo6bWQ1LXNwYXJjdjkubzpzaGExLXNwYXJjdjkubyBzaGEyNTYtc3BhcmN2OS5vIHNoYTUxMi1zcGFyY3Y5Lm86Ojo6OjpjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbGxfY2JjLm8gY21sbHQ0LXNwYXJjdjkubzpnaGFzaC1zcGFyY3Y5Lm86Ojp2b2lkIjsKK215ICRzcGFyY3Y4X2FzbT0iOnNwYXJjdjgubzo6ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6Ojo6Ojo6OnZvaWQiOworbXkgJGFscGhhX2FzbT0iYWxwaGFjcHVpZC5vOmJuX2FzbS5vIGFscGhhLW1vbnQubzo6Ojo6OnNoYTEtYWxwaGEubzo6Ojo6OjpnaGFzaC1hbHBoYS5vOjo6dm9pZCI7CitteSAkbWlwczY0X2FzbT0iOmJuLW1pcHMubyBtaXBzLW1vbnQubzo6OmFlc19jYmMubyBhZXMtbWlwcy5vOjo6c2hhMS1taXBzLm8gc2hhMjU2LW1pcHMubyBzaGE1MTItbWlwcy5vOjo6Ojo6Ojo6IjsKIG15ICRtaXBzMzJfYXNtPSRtaXBzNjRfYXNtOyAkbWlwczMyX2FzbSA9fiBzL1xzKnNoYTUxMlwtbWlwc1wuby8vOwotbXkgJHMzOTB4X2FzbT0iczM5MHhjYXAubyBzMzkweGNwdWlkLm86Ym4tczM5MHgubyBzMzkweC1tb250Lm8gczM5MHgtZ2YybS5vOjo6YWVzLXMzOTB4Lm8gYWVzLWN0ci5vIGFlcy14dHMubzo6OnNoYTEtczM5MHgubyBzaGEyNTYtczM5MHgubyBzaGE1MTItczM5MHgubzo6cmM0LXMzOTB4Lm86Ojo6OmdoYXNoLXMzOTB4Lm86IjsKLW15ICRhcm12NF9hc209ImFybWNhcC5vIGFybXY0Y3B1aWQubzpibl9hc20ubyBhcm12NC1tb250Lm8gYXJtdjQtZ2YybS5vOjo6YWVzX2NiYy5vIGFlcy1hcm12NC5vIGJzYWVzLWFybXY3Lm8gYWVzdjgtYXJteC5vOjo6c2hhMS1hcm12NC1sYXJnZS5vIHNoYTI1Ni1hcm12NC5vIHNoYTUxMi1hcm12NC5vOjo6Ojo6OmdoYXNoLWFybXY0Lm8gZ2hhc2h2OC1hcm14Lm86OnZvaWQiOwotbXkgJGFhcmNoNjRfYXNtPSJhcm1jYXAubyBhcm02NGNwdWlkLm8gbWVtX2Nsci5vOjo6OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjgubyBzaGEyNTYtYXJtdjgubyBzaGE1MTItYXJtdjgubzo6Ojo6OjpnaGFzaHY4LWFybXgubzoiOwotbXkgJHBhcmlzYzExX2FzbT0icGFyaXNjaWQubzpibl9hc20ubyBwYXJpc2MtbW9udC5vOjo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjozMiI7Ci1teSAkcGFyaXNjMjBfYXNtPSJwYXJpc2NpZC5vOnBhLXJpc2MyVy5vIHBhcmlzYy1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcGFyaXNjLm86OjpzaGExLXBhcmlzYy5vIHNoYTI1Ni1wYXJpc2MubyBzaGE1MTItcGFyaXNjLm86OnJjNC1wYXJpc2Mubzo6Ojo6Z2hhc2gtcGFyaXNjLm86OjY0IjsKLW15ICRwcGM2NF9hc209InBwY2NwdWlkLm8gcHBjY2FwLm86Ym4tcHBjLm8gcHBjLW1vbnQubyBwcGM2NC1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcHBjLm8gdnBhZXMtcHBjLm8gYWVzcDgtcHBjLm86OjpzaGExLXBwYy5vIHNoYTI1Ni1wcGMubyBzaGE1MTItcHBjLm8gc2hhMjU2cDgtcHBjLm8gc2hhNTEycDgtcHBjLm86Ojo6Ojo6Z2hhc2hwOC1wcGMubzoiOworbXkgJHMzOTB4X2FzbT0iczM5MHhjYXAubyBzMzkweGNwdWlkLm86Ym4tczM5MHgubyBzMzkweC1tb250Lm8gczM5MHgtZ2YybS5vOjo6YWVzLXMzOTB4Lm8gYWVzLWN0ci5vIGFlcy14dHMubzo6OnNoYTEtczM5MHgubyBzaGEyNTYtczM5MHgubyBzaGE1MTItczM5MHgubzo6cmM0LXMzOTB4Lm86Ojo6OmdoYXNoLXMzOTB4Lm86OiI7CitteSAkYXJtdjRfYXNtPSJhcm1jYXAubyBhcm12NGNwdWlkLm86Ym5fYXNtLm8gYXJtdjQtbW9udC5vIGFybXY0LWdmMm0ubzo6OmFlc19jYmMubyBhZXMtYXJtdjQubyBic2Flcy1hcm12Ny5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vIGdoYXNodjgtYXJteC5vOjo6dm9pZCI7CitteSAkYWFyY2g2NF9hc209ImFybWNhcC5vIGFybTY0Y3B1aWQubyBtZW1fY2xyLm86Ojo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzdjgtYXJteC5vOjo6c2hhMS1hcm12OC5vIHNoYTI1Ni1hcm12OC5vIHNoYTUxMi1hcm12OC5vOjo6Ojo6OmdoYXNodjgtYXJteC5vOjoiOworbXkgJHBhcmlzYzExX2FzbT0icGFyaXNjaWQubzpibl9hc20ubyBwYXJpc2MtbW9udC5vOjo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjo6MzIiOworbXkgJHBhcmlzYzIwX2FzbT0icGFyaXNjaWQubzpwYS1yaXNjMlcubyBwYXJpc2MtbW9udC5vOjo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjo6NjQiOworbXkgJHBwYzY0X2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wcGMubyB2cGFlcy1wcGMubyBhZXNwOC1wcGMubzo6OnNoYTEtcHBjLm8gc2hhMjU2LXBwYy5vIHNoYTUxMi1wcGMubyBzaGEyNTZwOC1wcGMubyBzaGE1MTJwOC1wcGMubzo6Ojo6OjpnaGFzaHA4LXBwYy5vOjoiOwogbXkgJHBwYzMyX2FzbT0kcHBjNjRfYXNtOwotbXkgJG5vX2FzbT0iOjo6Ojo6Ojo6Ojo6Ojo6OnZvaWQiOworbXkgJG5vX2FzbT0iOjo6Ojo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKIAogIyBBcyBmb3IgJEJTRHRocmVhZHMuIElkZWEgaXMgdG8gbWFpbnRhaW4gImNvbGxlY3RpdmUiIHNldCBvZiBmbGFncywKICMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLCAKQEAgLTE3OSw3ICsxNzksNyBAQAogIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwogbXkgJEJTRHRocmVhZHM9Ii1wdGhyZWFkIC1EX1RIUkVBRF9TQUZFIC1EX1JFRU5UUkFOVCI7CiAKLSNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGVjX29iaiA6ICRkZXNfb2JqIDogJGFlc19vYmogOiAkYmZfb2JqIDogJG1kNV9vYmogOiAkc2hhMV9vYmogOiAkY2FzdF9vYmogOiAkcmM0X29iaiA6ICRybWQxNjBfb2JqIDogJHJjNV9vYmogOiAkd3Bfb2JqIDogJGNtbGxfb2JqIDogJG1vZGVzX29iaiA6ICRlbmdpbmVzX29iaiA6ICRkc29fc2NoZW1lIDogJHNoYXJlZF90YXJnZXQgOiAkc2hhcmVkX2NmbGFnIDogJHNoYXJlZF9sZGZsYWcgOiAkc2hhcmVkX2V4dGVuc2lvbiA6ICRyYW5saWIgOiAkYXJmbGFncyA6ICRtdWx0aWxpYgorI2NvbmZpZy1zdHJpbmcJJGNjIDogJGNmbGFncyA6ICR1bmlzdGQgOiAkdGhyZWFkX2NmbGFnIDogJHN5c19pZCA6ICRsZmxhZ3MgOiAkYm5fb3BzIDogJGNwdWlkX29iaiA6ICRibl9vYmogOiAkZWNfb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICR3cF9vYmogOiAkY21sbF9vYmogOiAkbW9kZXNfb2JqIDogJGNoYXBvbHlfb2JqIDogJGVuZ2luZXNfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzIDogJG11bHRpbGliCiAKIG15ICV0YWJsZT0oCiAjIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LApAQCAtNzEzLDYgKzcxMyw3IEBACiBteSAkaWR4X3dwX29iaiA9ICRpZHgrKzsKIG15ICRpZHhfY21sbF9vYmogPSAkaWR4Kys7CiBteSAkaWR4X21vZGVzX29iaiA9ICRpZHgrKzsKK215ICRpZHhfY2hhcG9seV9vYmogPSAkaWR4Kys7CiBteSAkaWR4X2VuZ2luZXNfb2JqID0gJGlkeCsrOwogbXkgJGlkeF9wZXJsYXNtX3NjaGVtZSA9ICRpZHgrKzsKIG15ICRpZHhfZHNvX3NjaGVtZSA9ICRpZHgrKzsKQEAgLTEyMzksNiArMTI0MCw3IEBACiBteSAkd3Bfb2JqID0gJGZpZWxkc1skaWR4X3dwX29ial07CiBteSAkY21sbF9vYmogPSAkZmllbGRzWyRpZHhfY21sbF9vYmpdOwogbXkgJG1vZGVzX29iaiA9ICRmaWVsZHNbJGlkeF9tb2Rlc19vYmpdOworbXkgJGNoYXBvbHlfb2JqPSAkZmllbGRzWyRpZHhfY2hhcG9seV9vYmpdOwogbXkgJGVuZ2luZXNfb2JqID0gJGZpZWxkc1skaWR4X2VuZ2luZXNfb2JqXTsKIG15ICRwZXJsYXNtX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9wZXJsYXNtX3NjaGVtZV07CiBteSAkZHNvX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXTsKQEAgLTE0MDcsNyArMTQwOSw4IEBACiAJewogCSRjcHVpZF9vYmo9JGJuX29iaj0kZWNfb2JqPQogCSRkZXNfb2JqPSRhZXNfb2JqPSRiZl9vYmo9JGNhc3Rfb2JqPSRyYzRfb2JqPSRyYzVfb2JqPSRjbWxsX29iaj0KLQkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSRlbmdpbmVzX29iaj0iIjsKKwkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSRlbmdpbmVzX29iaj0KKwkkY2hhcG9seV9vYmo9IiI7CiAJfQogCiBpZiAoISRub19zaGFyZWQpCkBAIC0xNjIyLDYgKzE2MjUsMTAgQEAKIAl7CiAJJGNmbGFncy49IiAtREVDUF9OSVNUWjI1Nl9BU00iOwogCX0KK2lmICgkY2hhcG9seV9vYmogPX4gL2NoYWNoYTIwX3BvbHkxMzA1LykKKwl7CisJJGNmbGFncy49IiAtRENIQVBPTFlfQVNNIjsKKwl9CiAKICMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwogIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgpAQCAtMTc1MSw2ICsxNzU4LDcgQEAKIAlzL15XUF9BU01fT0JKPS4qJC9XUF9BU01fT0JKPSAkd3Bfb2JqLzsKIAlzL15DTUxMX0VOQz0uKiQvQ01MTF9FTkM9ICRjbWxsX29iai87CiAJcy9eTU9ERVNfQVNNX09CSi49KiQvTU9ERVNfQVNNX09CSj0gJG1vZGVzX29iai87CisJcy9eQ0hBUE9MWV9BU009LiokL0NIQVBPTFlfQVNNPSAkY2hhcG9seV9vYmovOwogCXMvXkVOR0lORVNfQVNNX09CSi49KiQvRU5HSU5FU19BU01fT0JKPSAkZW5naW5lc19vYmovOwogCXMvXlBFUkxBU01fU0NIRU1FPS4qJC9QRVJMQVNNX1NDSEVNRT0gJHBlcmxhc21fc2NoZW1lLzsKIAlzL15QUk9DRVNTT1I9LiovUFJPQ0VTU09SPSAkcHJvY2Vzc29yLzsKQEAgLTE4MTIsNiArMTgyMCw3IEBACiBwcmludCAiUk1EMTYwX09CSl9BU009JHJtZDE2MF9vYmpcbiI7CiBwcmludCAiQ01MTF9FTkMgICAgICA9JGNtbGxfb2JqXG4iOwogcHJpbnQgIk1PREVTX09CSiAgICAgPSRtb2Rlc19vYmpcbiI7CitwcmludCAiQ0hBUE9MWV9BU00gICA9JGNoYXBvbHlfb2JqXG4iOwogcHJpbnQgIkVOR0lORVNfT0JKICAgPSRlbmdpbmVzX29ialxuIjsKIHByaW50ICJQUk9DRVNTT1IgICAgID0kcHJvY2Vzc29yXG4iOwogcHJpbnQgIlJBTkxJQiAgICAgICAgPSRyYW5saWJcbiI7CkBAIC0yMDkzLDcgKzIxMDIsNyBAQAogCSAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiJHZlcnNpb25cXDAiCiAJICAgIC8vIE9wdGlvbmFsOgogCSAgICAvL1ZBTFVFICJDb21tZW50cyIsICJcXDAiCi0JICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgIKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKKwkgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAg77+9IDE5OTgtMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiBDb3B5cmlnaHQg77+9IDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKIAkgICAgLy9WQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlxcMCIKIAkgICAgLy9WQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlxcMCIKIAkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKQEAgLTIyMTEsNyArMjIyMCw3IEBACiAJbXkgKCRjYywgJGNmbGFncywgJHVuaXN0ZCwgJHRocmVhZF9jZmxhZywgJHN5c19pZCwgJGxmbGFncywKIAkgICAgJGJuX29wcywgJGNwdWlkX29iaiwgJGJuX29iaiwgJGVjX29iaiwgJGRlc19vYmosICRhZXNfb2JqLCAkYmZfb2JqLAogCSAgICAkbWQ1X29iaiwgJHNoYTFfb2JqLCAkY2FzdF9vYmosICRyYzRfb2JqLCAkcm1kMTYwX29iaiwKLQkgICAgJHJjNV9vYmosICR3cF9vYmosICRjbWxsX29iaiwgJG1vZGVzX29iaiwgJGVuZ2luZXNfb2JqLAorCSAgICAkcmM1X29iaiwgJHdwX29iaiwgJGNtbGxfb2JqLCAkbW9kZXNfb2JqLCAkY2hhcG9seV9vYmosICRlbmdpbmVzX29iaiwKIAkgICAgJHBlcmxhc21fc2NoZW1lLCAkZHNvX3NjaGVtZSwgJHNoYXJlZF90YXJnZXQsICRzaGFyZWRfY2ZsYWcsCiAJICAgICRzaGFyZWRfbGRmbGFnLCAkc2hhcmVkX2V4dGVuc2lvbiwgJHJhbmxpYiwgJGFyZmxhZ3MsICRtdWx0aWxpYik9CiAJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwpAQCAtMjI0MSw2ICsyMjUwLDcgQEAKIFwkd3Bfb2JqICAgICAgID0gJHdwX29iagogXCRjbWxsX29iaiAgICAgPSAkY21sbF9vYmoKIFwkbW9kZXNfb2JqICAgID0gJG1vZGVzX29iagorXCRjaGFwb2x5X29iaiAgPSAkY2hhcG9seV9vYmoKIFwkZW5naW5lc19vYmogID0gJGVuZ2luZXNfb2JqCiBcJHBlcmxhc21fc2NoZW1lID0gJHBlcmxhc21fc2NoZW1lCiBcJGRzb19zY2hlbWUgICA9ICRkc29fc2NoZW1lCmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1L2NoYWNoYTIwLmMgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1L2NoYWNoYTIwLmMKLS0tIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNS9jaGFjaGEyMC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvY2hhY2hhMjAuYwkyMDE2LTExLTMwIDE1OjM5OjEzLjU5MTgwNzIwOCAtMDUwMApAQCAtMCwwICsxLDExOSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBHb29nbGUgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiAqLworCisvKiBBZGFwdGVkIGZyb20gdGhlIHB1YmxpYyBkb21haW4sIGVzdHJlYW0gY29kZSBieSBELiBCZXJuc3RlaW4uICovCisKKyNpbmNsdWRlICJjaGFjaGEyMHBvbHkxMzA1LmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBVOFRPMzJfTElUVExFKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKCh1aW50MzJfdCkoKHApWzBdKSkgfCAoKHVpbnQzMl90KSgocClbMV0pIDw8IDgpIHwgXAorICAgKCh1aW50MzJfdCkoKHApWzJdKSA8PCAxNikgfCAoKHVpbnQzMl90KSgocClbM10pIDw8IDI0KSkKKworLyogc2lnbWEgY29udGFpbnMgdGhlIENoYUNoYSBjb25zdGFudHMsIHdoaWNoIGhhcHBlbiB0byBiZSBhbiBBU0NJSSBzdHJpbmcuICovCitzdGF0aWMgY29uc3QgdWludDhfdCBzaWdtYVsxNl0gPSB7ICdlJywgJ3gnLCAncCcsICdhJywgJ24nLCAnZCcsICcgJywgJzMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMicsICctJywgJ2InLCAneScsICd0JywgJ2UnLCAnICcsICdrJyB9OworCisjZGVmaW5lIFJPVEFURSh2LCBuKSAoKCh2KSA8PCAobikpIHwgKCh2KSA+PiAoMzIgLSAobikpKSkKKworI2RlZmluZSBVMzJUTzhfTElUVExFKHAsIHYpICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHApWzBdID0gKHYgPj4gMCkgJiAweGZmOyAgXAorICAgIChwKVsxXSA9ICh2ID4+IDgpICYgMHhmZjsgIFwKKyAgICAocClbMl0gPSAodiA+PiAxNikgJiAweGZmOyBcCisgICAgKHApWzNdID0gKHYgPj4gMjQpICYgMHhmZjsgXAorICB9CisKKy8qIFFVQVJURVJST1VORCB1cGRhdGVzIGEsIGIsIGMsIGQgd2l0aCBhIENoYUNoYSAicXVhcnRlciIgcm91bmQuICovCisjZGVmaW5lIFFVQVJURVJST1VORChhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICBcCisgIHhbYV0gKz0geFtiXTsgeFtkXSA9IFJPVEFURSh4W2RdIF4geFthXSwgMTYpOyBcCisgIHhbY10gKz0geFtkXTsgeFtiXSA9IFJPVEFURSh4W2JdIF4geFtjXSwgMTIpOyBcCisgIHhbYV0gKz0geFtiXTsgeFtkXSA9IFJPVEFURSh4W2RdIF4geFthXSwgIDgpOyBcCisgIHhbY10gKz0geFtkXTsgeFtiXSA9IFJPVEFURSh4W2JdIF4geFtjXSwgIDcpOworCisvKiBjaGFjaGFfY29yZSBwZXJmb3JtcyAyMCByb3VuZHMgb2YgQ2hhQ2hhIG9uIHRoZSBpbnB1dCB3b3JkcyBpbgorICogfGlucHV0fCBhbmQgd3JpdGVzIHRoZSA2NCBvdXRwdXQgYnl0ZXMgdG8gfG91dHB1dHwuICovCitzdGF0aWMgdm9pZCBjaGFjaGFfY29yZSh1aW50OF90IG91dHB1dFs2NF0sIGNvbnN0IHVpbnQzMl90IGlucHV0WzE2XSkgeworICB1aW50MzJfdCB4WzE2XTsKKyAgaW50IGk7CisKKyAgbWVtY3B5KHgsIGlucHV0LCBzaXplb2YodWludDMyX3QpICogMTYpOworICBmb3IgKGkgPSAyMDsgaSA+IDA7IGkgLT0gMikgeworICAgIFFVQVJURVJST1VORCgwLCA0LCA4LCAxMikKKyAgICBRVUFSVEVSUk9VTkQoMSwgNSwgOSwgMTMpCisgICAgUVVBUlRFUlJPVU5EKDIsIDYsIDEwLCAxNCkKKyAgICBRVUFSVEVSUk9VTkQoMywgNywgMTEsIDE1KQorICAgIFFVQVJURVJST1VORCgwLCA1LCAxMCwgMTUpCisgICAgUVVBUlRFUlJPVU5EKDEsIDYsIDExLCAxMikKKyAgICBRVUFSVEVSUk9VTkQoMiwgNywgOCwgMTMpCisgICAgUVVBUlRFUlJPVU5EKDMsIDQsIDksIDE0KQorICB9CisKKyAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICB4W2ldICs9IGlucHV0W2ldOworICB9CisgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgVTMyVE84X0xJVFRMRShvdXRwdXQgKyA0ICogaSwgeFtpXSk7CisgIH0KK30KKwordm9pZCBDUllQVE9fY2hhY2hhXzIwKHVpbnQ4X3QgKm91dCwgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbMzJdLCBjb25zdCB1aW50OF90IG5vbmNlWzEyXSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb3VudGVyKSB7CisgIGFzc2VydCghYnVmZmVyc19hbGlhcyhvdXQsIGluX2xlbiwgaW4sIGluX2xlbikgfHwgaW4gPT0gb3V0KTsKKworICB1aW50MzJfdCBpbnB1dFsxNl07CisgIHVpbnQ4X3QgYnVmWzY0XTsKKyAgc2l6ZV90IHRvZG8sIGk7CisKKyAgaW5wdXRbMF0gPSBVOFRPMzJfTElUVExFKHNpZ21hICsgMCk7CisgIGlucHV0WzFdID0gVThUTzMyX0xJVFRMRShzaWdtYSArIDQpOworICBpbnB1dFsyXSA9IFU4VE8zMl9MSVRUTEUoc2lnbWEgKyA4KTsKKyAgaW5wdXRbM10gPSBVOFRPMzJfTElUVExFKHNpZ21hICsgMTIpOworCisgIGlucHV0WzRdID0gVThUTzMyX0xJVFRMRShrZXkgKyAwKTsKKyAgaW5wdXRbNV0gPSBVOFRPMzJfTElUVExFKGtleSArIDQpOworICBpbnB1dFs2XSA9IFU4VE8zMl9MSVRUTEUoa2V5ICsgOCk7CisgIGlucHV0WzddID0gVThUTzMyX0xJVFRMRShrZXkgKyAxMik7CisKKyAgaW5wdXRbOF0gPSBVOFRPMzJfTElUVExFKGtleSArIDE2KTsKKyAgaW5wdXRbOV0gPSBVOFRPMzJfTElUVExFKGtleSArIDIwKTsKKyAgaW5wdXRbMTBdID0gVThUTzMyX0xJVFRMRShrZXkgKyAyNCk7CisgIGlucHV0WzExXSA9IFU4VE8zMl9MSVRUTEUoa2V5ICsgMjgpOworCisgIGlucHV0WzEyXSA9IGNvdW50ZXI7CisgIGlucHV0WzEzXSA9IFU4VE8zMl9MSVRUTEUobm9uY2UgKyAwKTsKKyAgaW5wdXRbMTRdID0gVThUTzMyX0xJVFRMRShub25jZSArIDQpOworICBpbnB1dFsxNV0gPSBVOFRPMzJfTElUVExFKG5vbmNlICsgOCk7CisKKyAgd2hpbGUgKGluX2xlbiA+IDApIHsKKyAgICB0b2RvID0gc2l6ZW9mKGJ1Zik7CisgICAgaWYgKGluX2xlbiA8IHRvZG8pIHsKKyAgICAgIHRvZG8gPSBpbl9sZW47CisgICAgfQorCisgICAgY2hhY2hhX2NvcmUoYnVmLCBpbnB1dCk7CisgICAgZm9yIChpID0gMDsgaSA8IHRvZG87IGkrKykgeworICAgICAgb3V0W2ldID0gaW5baV0gXiBidWZbaV07CisgICAgfQorCisgICAgb3V0ICs9IHRvZG87CisgICAgaW4gKz0gdG9kbzsKKyAgICBpbl9sZW4gLT0gdG9kbzsKKworICAgIGlucHV0WzEyXSsrOworICB9Cit9CmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1L2NoYWNoYTIwcG9seTEzMDUuaCBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNS5oCi0tLSBvcGVuc3NsLTEuMC4yai9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNS5oCTIwMTYtMTEtMzAgMTU6Mzg6MDkuOTg3OTYwNjA1IC0wNTAwCkBAIC0wLDAgKzEsNjkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCwgR29vZ2xlIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBPUEVOU1NMX0hFQURFUl9QT0xZMTMwNV9ICisjZGVmaW5lIE9QRU5TU0xfSEVBREVSX1BPTFkxMzA1X0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImNyeXB0by5oIgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK3R5cGVkZWYgdWludDhfdCBwb2x5MTMwNV9zdGF0ZVs1MTJdOworCisvKiBDUllQVE9fcG9seTEzMDVfaW5pdCBzZXRzIHVwIHxzdGF0ZXwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgYW4KKyAqIGF1dGhlbnRpY2F0aW9uIHRhZyB3aXRoIHRoZSBvbmUtdGltZSBrZXkgfGtleXwuIE5vdGUgdGhhdCB8a2V5fCBpcyBhCisgKiBvbmUtdGltZSBrZXkgYW5kIHRoZXJlZm9yZSB0aGVyZSBpcyBubyBgcmVzZXQnIG1ldGhvZCBiZWNhdXNlIHRoYXQgd291bGQKKyAqIGVuYWJsZSBzZXZlcmFsIG1lc3NhZ2VzIHRvIGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgc2FtZSBrZXkuICovCit2b2lkIENSWVBUT19wb2x5MTMwNV9pbml0KHBvbHkxMzA1X3N0YXRlKiBzdGF0ZSwgY29uc3QgdWludDhfdCBrZXlbMzJdKTsKKworLyogQ1JZUFRPX3BvbHkxMzA1X3VwZGF0ZSBwcm9jZXNzZXMgfGluX2xlbnwgYnl0ZXMgZnJvbSB8aW58LiBJdCBjYW4gYmUgY2FsbGVkCisgKiB6ZXJvIG9yIG1vcmUgdGltZXMgYWZ0ZXIgcG9seTEzMDVfaW5pdC4gKi8KK3ZvaWQgQ1JZUFRPX3BvbHkxMzA1X3VwZGF0ZShwb2x5MTMwNV9zdGF0ZSogc3RhdGUsIGNvbnN0IHVpbnQ4X3QqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4pOworCisvKiBDUllQVE9fcG9seTEzMDVfZmluaXNoIGNvbXBsZXRlcyB0aGUgcG9seTEzMDUgY2FsY3VsYXRpb24gYW5kIHdyaXRlcyBhIDE2CisgKiBieXRlIGF1dGhlbnRpY2F0aW9uIHRhZyB0byB8bWFjfC4gVGhlIHxtYWN8IGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlCisgKiBhbGlnbmVkLiAqLwordm9pZCBDUllQVE9fcG9seTEzMDVfZmluaXNoKHBvbHkxMzA1X3N0YXRlKiBzdGF0ZSwgdWludDhfdCBtYWNbMTZdKTsKKworLyogQ1JZUFRPX2NoYWNoYV8yMCBlbmNyeXB0cyB8aW5fbGVufCBieXRlcyBmcm9tIHxpbnwgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZAorICogbm9uY2UgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHxvdXR8LiBJZiB8aW58IGFuZCB8b3V0fCBhbGlhcywgdGhleSBtdXN0IGJlCisgKiBlcXVhbC4gVGhlIGluaXRpYWwgYmxvY2sgY291bnRlciBpcyBzcGVjaWZpZWQgYnkgfGNvdW50ZXJ8LiAqLwordm9pZCBDUllQVE9fY2hhY2hhXzIwKHVpbnQ4X3QgKm91dCwgY29uc3QgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwgY29uc3QgdWludDhfdCBrZXlbMzJdLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qgbm9uY2VbMTJdLCB1aW50MzJfdCBjb3VudGVyKTsKKworLyogYnVmZmVyc19hbGlhcyByZXR1cm5zIG9uZSBpZiB8YXwgYW5kIHxifCBhbGlhcyBhbmQgemVybyBvdGhlcndpc2UuICovCitzdGF0aWMgaW5saW5lIGludCBidWZmZXJzX2FsaWFzKGNvbnN0IHVpbnQ4X3QgKmEsIHNpemVfdCBhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYiwgc2l6ZV90IGJfbGVuKSB7CisgIC8qIENhc3QgfGF8IGFuZCB8YnwgdG8gaW50ZWdlcnMuIEluIEMsIHBvaW50ZXIgY29tcGFyaXNvbnMgYmV0d2VlbiB1bnJlbGF0ZWQKKyAgICogb2JqZWN0cyBhcmUgdW5kZWZpbmVkIHdoZXJlYXMgcG9pbnRlciB0byBpbnRlZ2VyIGNvbnZlcnNpb25zIGFyZSBtZXJlbHkKKyAgICogaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gV2UgYXNzdW1lIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGl0IGluIGEgc2FuZQorICAgKiB3YXkuICovCisgIHVpbnRwdHJfdCBhX3UgPSAodWludHB0cl90KWE7CisgIHVpbnRwdHJfdCBiX3UgPSAodWludHB0cl90KWI7CisgIHJldHVybiBhX3UgKyBhX2xlbiA+IGJfdSAmJiBiX3UgKyBiX2xlbiA+IGFfdTsKK30KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9ICAvKiBleHRlcm4gQyAqLworI2VuZGlmCisKKyNlbmRpZiAgLyogT1BFTlNTTF9IRUFERVJfUE9MWTEzMDVfSCAqLwpkaWZmIC1OYXVyIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNS9NYWtlZmlsZSBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvTWFrZWZpbGUKLS0tIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNS9NYWtlZmlsZQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1L01ha2VmaWxlCTIwMTYtMTEtMzAgMDk6NTM6NDMuNzM4NDQxMTk2IC0wNTAwCkBAIC0wLDAgKzEsODAgQEAKKyMKKyMgY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUvTWFrZWZpbGUKKyMKKworRElSPQljaGFjaGEyMHBvbHkxMzA1CitUT1A9CS4uLy4uCitDQz0JY2MKK0lOQ0xVREVTPSAtSS4uIC1JJChUT1ApIC1JLi4vLi4vaW5jbHVkZQorQ0ZMQUc9LWcKK01BS0VGSUxFPQlNYWtlZmlsZQorQVI9CQlhciByCisKK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKK0FTRkxBR1M9ICQoSU5DTFVERVMpICQoQVNGTEFHKQorQUZMQUdTPSAkKEFTRkxBR1MpCisKK0dFTkVSQUw9TWFrZWZpbGUKK1RFU1Q9CitBUFBTPQorCitMSUI9JChUT1ApL2xpYmNyeXB0by5hCitMSUJTUkM9IGNoYWNoYTIwLmMgcG9seTEzMDUuYworTElCT0JKPSBjaGFjaGEyMC5vIHBvbHkxMzA1Lm8gJChDSEFQT0xZX0FTTSkKKworU1JDPSAkKExJQlNSQykKKworRVhIRUFERVI9IGNoYWNoYTIwcG9seTEzMDUuaAorSEVBREVSPSAkKEVYSEVBREVSKQorCitBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorCit0b3A6CisJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQorCithbGw6CWxpYgorCitsaWI6CSQoTElCT0JKKQorCSQoQVIpICQoTElCKSAkKExJQk9CSikKKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKwlAdG91Y2ggbGliCisKK2ZpbGVzOgorCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCisKK2xpbmtzOgorCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCisJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorCitpbnN0YWxsOgorCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCisJZG8gIFwKKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCisJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKwlkb25lOworCit0YWdzOgorCWN0YWdzICQoU1JDKQorCit0ZXN0czoKKworbGludDoKKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKKworZGVwZW5kOgorCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgorCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKKworZGNsZWFuOgorCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKKwltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKworY2xlYW46CisJcm0gLWYgKi5zICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCisKKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKworY2hhY2hhMjAubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NoYWNoYTIwcG9seTEzMDUuaCBjaGFjaGEyMC5jCitwb2x5MTMwNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY2hhY2hhMjBwb2x5MTMwNS5oIHBvbHkxMzA1LmMKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvcG9seTEzMDUuYyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDUvcG9seTEzMDUuYwotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1L3BvbHkxMzA1LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNS9wb2x5MTMwNS5jCTIwMTYtMTEtMzAgMTA6NTY6NTguMDAwODUzNjc2IC0wNTAwCkBAIC0wLDAgKzEsMzA2IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEdvb2dsZSBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuICovCisKKy8qIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgcG9seTEzMDUgaXMgYnkgQW5kcmV3IE1vb24KKyAqIChodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmEpIGFuZCByZWxlYXNlZCBhcyBwdWJsaWMKKyAqIGRvbWFpbi4gKi8KKworI2luY2x1ZGUgImNoYWNoYTIwcG9seTEzMDUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIWRlZmluZWQoQl9FTkRJQU4pCisvKiBXZSBjYW4gYXNzdW1lIGxpdHRsZS1lbmRpYW4uICovCitzdGF0aWMgdWludDMyX3QgVThUTzMyX0xFKGNvbnN0IHVpbnQ4X3QgKm0pIHsKKyAgdWludDMyX3QgcjsKKyAgbWVtY3B5KCZyLCBtLCBzaXplb2YocikpOworICByZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgVTMyVE84X0xFKHVpbnQ4X3QgKm0sIHVpbnQzMl90IHYpIHsgbWVtY3B5KG0sICZ2LCBzaXplb2YodikpOyB9CisjZWxzZQorc3RhdGljIHVpbnQzMl90IFU4VE8zMl9MRShjb25zdCB1aW50OF90ICptKSB7CisgIHJldHVybiAodWludDMyX3QpbVswXSB8ICh1aW50MzJfdCltWzFdIDw8IDggfCAodWludDMyX3QpbVsyXSA8PCAxNiB8CisgICAgICAgICAodWludDMyX3QpbVszXSA8PCAyNDsKK30KKworc3RhdGljIHZvaWQgVTMyVE84X0xFKHVpbnQ4X3QgKm0sIHVpbnQzMl90IHYpIHsKKyAgbVswXSA9IHY7CisgIG1bMV0gPSB2ID4+IDg7CisgIG1bMl0gPSB2ID4+IDE2OworICBtWzNdID0gdiA+PiAyNDsKK30KKyNlbmRpZgorCitzdGF0aWMgdWludDY0X3QgbXVsMzJ4MzJfNjQodWludDMyX3QgYSwgdWludDMyX3QgYikgeyByZXR1cm4gKHVpbnQ2NF90KWEgKiBiOyB9CisKK3N0cnVjdCBwb2x5MTMwNV9zdGF0ZV9zdCB7CisgIHVpbnQzMl90IHIwLCByMSwgcjIsIHIzLCByNDsKKyAgdWludDMyX3QgczEsIHMyLCBzMywgczQ7CisgIHVpbnQzMl90IGgwLCBoMSwgaDIsIGgzLCBoNDsKKyAgdWludDhfdCBidWZbMTZdOworICB1bnNpZ25lZCBpbnQgYnVmX3VzZWQ7CisgIHVpbnQ4X3Qga2V5WzE2XTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvbHkxMzA1X3N0YXRlX3N0ICpwb2x5MTMwNV9hbGlnbmVkX3N0YXRlKAorICAgIHBvbHkxMzA1X3N0YXRlICpzdGF0ZSkgeworICByZXR1cm4gKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZV9zdCAqKSgoKHVpbnRwdHJfdClzdGF0ZSArIDYzKSAmIH42Myk7Cit9CisKKy8qIHBvbHkxMzA1X2Jsb2NrcyB1cGRhdGVzIHxzdGF0ZXwgZ2l2ZW4gc29tZSBhbW91bnQgb2YgaW5wdXQgZGF0YS4gVGhpcworICogZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGggYSB8bGVufCB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDE2IGF0IHRoZQorICogZW5kIG9mIHRoZSBkYXRhLiBPdGhlcndpc2UgdGhlIGlucHV0IG11c3QgYmUgYnVmZmVyZWQgaW50byAxNiBieXRlIGJsb2Nrcy4gKi8KK3N0YXRpYyB2b2lkIHBvbHkxMzA1X3VwZGF0ZShzdHJ1Y3QgcG9seTEzMDVfc3RhdGVfc3QgKnN0YXRlLCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKSB7CisgIHVpbnQzMl90IHQwLCB0MSwgdDIsIHQzOworICB1aW50NjRfdCB0WzVdOworICB1aW50MzJfdCBiOworICB1aW50NjRfdCBjOworICBzaXplX3QgajsKKyAgdWludDhfdCBtcFsxNl07CisKKyAgaWYgKGxlbiA8IDE2KSB7CisgICAgZ290byBwb2x5MTMwNV9kb25uYV9hdG1vc3QxNWJ5dGVzOworICB9CisKK3BvbHkxMzA1X2Rvbm5hXzE2Ynl0ZXM6CisgIHQwID0gVThUTzMyX0xFKGluKTsKKyAgdDEgPSBVOFRPMzJfTEUoaW4gKyA0KTsKKyAgdDIgPSBVOFRPMzJfTEUoaW4gKyA4KTsKKyAgdDMgPSBVOFRPMzJfTEUoaW4gKyAxMik7CisKKyAgaW4gKz0gMTY7CisgIGxlbiAtPSAxNjsKKworICBzdGF0ZS0+aDAgKz0gdDAgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMSArPSAoKCgodWludDY0X3QpdDEgPDwgMzIpIHwgdDApID4+IDI2KSAmIDB4M2ZmZmZmZjsKKyAgc3RhdGUtPmgyICs9ICgoKCh1aW50NjRfdCl0MiA8PCAzMikgfCB0MSkgPj4gMjApICYgMHgzZmZmZmZmOworICBzdGF0ZS0+aDMgKz0gKCgoKHVpbnQ2NF90KXQzIDw8IDMyKSB8IHQyKSA+PiAxNCkgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oNCArPSAodDMgPj4gOCkgfCAoMSA8PCAyNCk7CisKK3BvbHkxMzA1X2Rvbm5hX211bDoKKyAgdFswXSA9IG11bDMyeDMyXzY0KHN0YXRlLT5oMCwgc3RhdGUtPnIwKSArIG11bDMyeDMyXzY0KHN0YXRlLT5oMSwgc3RhdGUtPnM0KSArCisgICAgICAgICBtdWwzMngzMl82NChzdGF0ZS0+aDIsIHN0YXRlLT5zMykgKyBtdWwzMngzMl82NChzdGF0ZS0+aDMsIHN0YXRlLT5zMikgKworICAgICAgICAgbXVsMzJ4MzJfNjQoc3RhdGUtPmg0LCBzdGF0ZS0+czEpOworICB0WzFdID0gbXVsMzJ4MzJfNjQoc3RhdGUtPmgwLCBzdGF0ZS0+cjEpICsgbXVsMzJ4MzJfNjQoc3RhdGUtPmgxLCBzdGF0ZS0+cjApICsKKyAgICAgICAgIG11bDMyeDMyXzY0KHN0YXRlLT5oMiwgc3RhdGUtPnM0KSArIG11bDMyeDMyXzY0KHN0YXRlLT5oMywgc3RhdGUtPnMzKSArCisgICAgICAgICBtdWwzMngzMl82NChzdGF0ZS0+aDQsIHN0YXRlLT5zMik7CisgIHRbMl0gPSBtdWwzMngzMl82NChzdGF0ZS0+aDAsIHN0YXRlLT5yMikgKyBtdWwzMngzMl82NChzdGF0ZS0+aDEsIHN0YXRlLT5yMSkgKworICAgICAgICAgbXVsMzJ4MzJfNjQoc3RhdGUtPmgyLCBzdGF0ZS0+cjApICsgbXVsMzJ4MzJfNjQoc3RhdGUtPmgzLCBzdGF0ZS0+czQpICsKKyAgICAgICAgIG11bDMyeDMyXzY0KHN0YXRlLT5oNCwgc3RhdGUtPnMzKTsKKyAgdFszXSA9IG11bDMyeDMyXzY0KHN0YXRlLT5oMCwgc3RhdGUtPnIzKSArIG11bDMyeDMyXzY0KHN0YXRlLT5oMSwgc3RhdGUtPnIyKSArCisgICAgICAgICBtdWwzMngzMl82NChzdGF0ZS0+aDIsIHN0YXRlLT5yMSkgKyBtdWwzMngzMl82NChzdGF0ZS0+aDMsIHN0YXRlLT5yMCkgKworICAgICAgICAgbXVsMzJ4MzJfNjQoc3RhdGUtPmg0LCBzdGF0ZS0+czQpOworICB0WzRdID0gbXVsMzJ4MzJfNjQoc3RhdGUtPmgwLCBzdGF0ZS0+cjQpICsgbXVsMzJ4MzJfNjQoc3RhdGUtPmgxLCBzdGF0ZS0+cjMpICsKKyAgICAgICAgIG11bDMyeDMyXzY0KHN0YXRlLT5oMiwgc3RhdGUtPnIyKSArIG11bDMyeDMyXzY0KHN0YXRlLT5oMywgc3RhdGUtPnIxKSArCisgICAgICAgICBtdWwzMngzMl82NChzdGF0ZS0+aDQsIHN0YXRlLT5yMCk7CisKKyAgc3RhdGUtPmgwID0gKHVpbnQzMl90KXRbMF0gJiAweDNmZmZmZmY7CisgIGMgPSAodFswXSA+PiAyNik7CisgIHRbMV0gKz0gYzsKKyAgc3RhdGUtPmgxID0gKHVpbnQzMl90KXRbMV0gJiAweDNmZmZmZmY7CisgIGIgPSAodWludDMyX3QpKHRbMV0gPj4gMjYpOworICB0WzJdICs9IGI7CisgIHN0YXRlLT5oMiA9ICh1aW50MzJfdCl0WzJdICYgMHgzZmZmZmZmOworICBiID0gKHVpbnQzMl90KSh0WzJdID4+IDI2KTsKKyAgdFszXSArPSBiOworICBzdGF0ZS0+aDMgPSAodWludDMyX3QpdFszXSAmIDB4M2ZmZmZmZjsKKyAgYiA9ICh1aW50MzJfdCkodFszXSA+PiAyNik7CisgIHRbNF0gKz0gYjsKKyAgc3RhdGUtPmg0ID0gKHVpbnQzMl90KXRbNF0gJiAweDNmZmZmZmY7CisgIGIgPSAodWludDMyX3QpKHRbNF0gPj4gMjYpOworICBzdGF0ZS0+aDAgKz0gYiAqIDU7CisKKyAgaWYgKGxlbiA+PSAxNikgeworICAgIGdvdG8gcG9seTEzMDVfZG9ubmFfMTZieXRlczsKKyAgfQorCisvKiBmaW5hbCBieXRlcyAqLworcG9seTEzMDVfZG9ubmFfYXRtb3N0MTVieXRlczoKKyAgaWYgKCFsZW4pIHsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKyAgICBtcFtqXSA9IGluW2pdOworICB9CisgIG1wW2orK10gPSAxOworICBmb3IgKDsgaiA8IDE2OyBqKyspIHsKKyAgICBtcFtqXSA9IDA7CisgIH0KKyAgbGVuID0gMDsKKworICB0MCA9IFU4VE8zMl9MRShtcCArIDApOworICB0MSA9IFU4VE8zMl9MRShtcCArIDQpOworICB0MiA9IFU4VE8zMl9MRShtcCArIDgpOworICB0MyA9IFU4VE8zMl9MRShtcCArIDEyKTsKKworICBzdGF0ZS0+aDAgKz0gdDAgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMSArPSAoKCgodWludDY0X3QpdDEgPDwgMzIpIHwgdDApID4+IDI2KSAmIDB4M2ZmZmZmZjsKKyAgc3RhdGUtPmgyICs9ICgoKCh1aW50NjRfdCl0MiA8PCAzMikgfCB0MSkgPj4gMjApICYgMHgzZmZmZmZmOworICBzdGF0ZS0+aDMgKz0gKCgoKHVpbnQ2NF90KXQzIDw8IDMyKSB8IHQyKSA+PiAxNCkgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oNCArPSAodDMgPj4gOCk7CisKKyAgZ290byBwb2x5MTMwNV9kb25uYV9tdWw7Cit9CisKK3ZvaWQgQ1JZUFRPX3BvbHkxMzA1X2luaXQocG9seTEzMDVfc3RhdGUgKnN0YXRlcCwgY29uc3QgdWludDhfdCBrZXlbMzJdKSB7CisgIHN0cnVjdCBwb2x5MTMwNV9zdGF0ZV9zdCAqc3RhdGUgPSBwb2x5MTMwNV9hbGlnbmVkX3N0YXRlKHN0YXRlcCk7CisgIHVpbnQzMl90IHQwLCB0MSwgdDIsIHQzOworCisgIHQwID0gVThUTzMyX0xFKGtleSArIDApOworICB0MSA9IFU4VE8zMl9MRShrZXkgKyA0KTsKKyAgdDIgPSBVOFRPMzJfTEUoa2V5ICsgOCk7CisgIHQzID0gVThUTzMyX0xFKGtleSArIDEyKTsKKworICAvKiBwcmVjb21wdXRlIG11bHRpcGxpZXJzICovCisgIHN0YXRlLT5yMCA9IHQwICYgMHgzZmZmZmZmOworICB0MCA+Pj0gMjY7CisgIHQwIHw9IHQxIDw8IDY7CisgIHN0YXRlLT5yMSA9IHQwICYgMHgzZmZmZjAzOworICB0MSA+Pj0gMjA7CisgIHQxIHw9IHQyIDw8IDEyOworICBzdGF0ZS0+cjIgPSB0MSAmIDB4M2ZmYzBmZjsKKyAgdDIgPj49IDE0OworICB0MiB8PSB0MyA8PCAxODsKKyAgc3RhdGUtPnIzID0gdDIgJiAweDNmMDNmZmY7CisgIHQzID4+PSA4OworICBzdGF0ZS0+cjQgPSB0MyAmIDB4MDBmZmZmZjsKKworICBzdGF0ZS0+czEgPSBzdGF0ZS0+cjEgKiA1OworICBzdGF0ZS0+czIgPSBzdGF0ZS0+cjIgKiA1OworICBzdGF0ZS0+czMgPSBzdGF0ZS0+cjMgKiA1OworICBzdGF0ZS0+czQgPSBzdGF0ZS0+cjQgKiA1OworCisgIC8qIGluaXQgc3RhdGUgKi8KKyAgc3RhdGUtPmgwID0gMDsKKyAgc3RhdGUtPmgxID0gMDsKKyAgc3RhdGUtPmgyID0gMDsKKyAgc3RhdGUtPmgzID0gMDsKKyAgc3RhdGUtPmg0ID0gMDsKKworICBzdGF0ZS0+YnVmX3VzZWQgPSAwOworICBtZW1jcHkoc3RhdGUtPmtleSwga2V5ICsgMTYsIHNpemVvZihzdGF0ZS0+a2V5KSk7Cit9CisKK3ZvaWQgQ1JZUFRPX3BvbHkxMzA1X3VwZGF0ZShwb2x5MTMwNV9zdGF0ZSAqc3RhdGVwLCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5fbGVuKSB7CisgIHVuc2lnbmVkIGludCBpOworICBzdHJ1Y3QgcG9seTEzMDVfc3RhdGVfc3QgKnN0YXRlID0gcG9seTEzMDVfYWxpZ25lZF9zdGF0ZShzdGF0ZXApOworCisgIGlmIChzdGF0ZS0+YnVmX3VzZWQpIHsKKyAgICB1bnNpZ25lZCB0b2RvID0gMTYgLSBzdGF0ZS0+YnVmX3VzZWQ7CisgICAgaWYgKHRvZG8gPiBpbl9sZW4pIHsKKyAgICAgIHRvZG8gPSAodW5zaWduZWQpaW5fbGVuOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdG9kbzsgaSsrKSB7CisgICAgICBzdGF0ZS0+YnVmW3N0YXRlLT5idWZfdXNlZCArIGldID0gaW5baV07CisgICAgfQorICAgIHN0YXRlLT5idWZfdXNlZCArPSB0b2RvOworICAgIGluX2xlbiAtPSB0b2RvOworICAgIGluICs9IHRvZG87CisKKyAgICBpZiAoc3RhdGUtPmJ1Zl91c2VkID09IDE2KSB7CisgICAgICBwb2x5MTMwNV91cGRhdGUoc3RhdGUsIHN0YXRlLT5idWYsIDE2KTsKKyAgICAgIHN0YXRlLT5idWZfdXNlZCA9IDA7CisgICAgfQorICB9CisKKyAgaWYgKGluX2xlbiA+PSAxNikgeworICAgIHNpemVfdCB0b2RvID0gaW5fbGVuICYgfjB4ZjsKKyAgICBwb2x5MTMwNV91cGRhdGUoc3RhdGUsIGluLCB0b2RvKTsKKyAgICBpbiArPSB0b2RvOworICAgIGluX2xlbiAmPSAweGY7CisgIH0KKworICBpZiAoaW5fbGVuKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGluX2xlbjsgaSsrKSB7CisgICAgICBzdGF0ZS0+YnVmW2ldID0gaW5baV07CisgICAgfQorICAgIHN0YXRlLT5idWZfdXNlZCA9ICh1bnNpZ25lZClpbl9sZW47CisgIH0KK30KKwordm9pZCBDUllQVE9fcG9seTEzMDVfZmluaXNoKHBvbHkxMzA1X3N0YXRlICpzdGF0ZXAsIHVpbnQ4X3QgbWFjWzE2XSkgeworICBzdHJ1Y3QgcG9seTEzMDVfc3RhdGVfc3QgKnN0YXRlID0gcG9seTEzMDVfYWxpZ25lZF9zdGF0ZShzdGF0ZXApOworICB1aW50NjRfdCBmMCwgZjEsIGYyLCBmMzsKKyAgdWludDMyX3QgZzAsIGcxLCBnMiwgZzMsIGc0OworICB1aW50MzJfdCBiLCBuYjsKKworCisKKworCisKKworCisgIGlmIChzdGF0ZS0+YnVmX3VzZWQpIHsKKyAgICBwb2x5MTMwNV91cGRhdGUoc3RhdGUsIHN0YXRlLT5idWYsIHN0YXRlLT5idWZfdXNlZCk7CisgIH0KKworICBiID0gc3RhdGUtPmgwID4+IDI2OworICBzdGF0ZS0+aDAgPSBzdGF0ZS0+aDAgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMSArPSBiOworICBiID0gc3RhdGUtPmgxID4+IDI2OworICBzdGF0ZS0+aDEgPSBzdGF0ZS0+aDEgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMiArPSBiOworICBiID0gc3RhdGUtPmgyID4+IDI2OworICBzdGF0ZS0+aDIgPSBzdGF0ZS0+aDIgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMyArPSBiOworICBiID0gc3RhdGUtPmgzID4+IDI2OworICBzdGF0ZS0+aDMgPSBzdGF0ZS0+aDMgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oNCArPSBiOworICBiID0gc3RhdGUtPmg0ID4+IDI2OworICBzdGF0ZS0+aDQgPSBzdGF0ZS0+aDQgJiAweDNmZmZmZmY7CisgIHN0YXRlLT5oMCArPSBiICogNTsKKworICBnMCA9IHN0YXRlLT5oMCArIDU7CisgIGIgPSBnMCA+PiAyNjsKKyAgZzAgJj0gMHgzZmZmZmZmOworICBnMSA9IHN0YXRlLT5oMSArIGI7CisgIGIgPSBnMSA+PiAyNjsKKyAgZzEgJj0gMHgzZmZmZmZmOworICBnMiA9IHN0YXRlLT5oMiArIGI7CisgIGIgPSBnMiA+PiAyNjsKKyAgZzIgJj0gMHgzZmZmZmZmOworICBnMyA9IHN0YXRlLT5oMyArIGI7CisgIGIgPSBnMyA+PiAyNjsKKyAgZzMgJj0gMHgzZmZmZmZmOworICBnNCA9IHN0YXRlLT5oNCArIGIgLSAoMSA8PCAyNik7CisKKyAgYiA9IChnNCA+PiAzMSkgLSAxOworICBuYiA9IH5iOworICBzdGF0ZS0+aDAgPSAoc3RhdGUtPmgwICYgbmIpIHwgKGcwICYgYik7CisgIHN0YXRlLT5oMSA9IChzdGF0ZS0+aDEgJiBuYikgfCAoZzEgJiBiKTsKKyAgc3RhdGUtPmgyID0gKHN0YXRlLT5oMiAmIG5iKSB8IChnMiAmIGIpOworICBzdGF0ZS0+aDMgPSAoc3RhdGUtPmgzICYgbmIpIHwgKGczICYgYik7CisgIHN0YXRlLT5oNCA9IChzdGF0ZS0+aDQgJiBuYikgfCAoZzQgJiBiKTsKKworICBmMCA9ICgoc3RhdGUtPmgwKSB8IChzdGF0ZS0+aDEgPDwgMjYpKSArICh1aW50NjRfdClVOFRPMzJfTEUoJnN0YXRlLT5rZXlbMF0pOworICBmMSA9ICgoc3RhdGUtPmgxID4+IDYpIHwgKHN0YXRlLT5oMiA8PCAyMCkpICsKKyAgICAgICAodWludDY0X3QpVThUTzMyX0xFKCZzdGF0ZS0+a2V5WzRdKTsKKyAgZjIgPSAoKHN0YXRlLT5oMiA+PiAxMikgfCAoc3RhdGUtPmgzIDw8IDE0KSkgKworICAgICAgICh1aW50NjRfdClVOFRPMzJfTEUoJnN0YXRlLT5rZXlbOF0pOworICBmMyA9ICgoc3RhdGUtPmgzID4+IDE4KSB8IChzdGF0ZS0+aDQgPDwgOCkpICsKKyAgICAgICAodWludDY0X3QpVThUTzMyX0xFKCZzdGF0ZS0+a2V5WzEyXSk7CisKKyAgVTMyVE84X0xFKCZtYWNbMF0sIGYwKTsKKyAgZjEgKz0gKGYwID4+IDMyKTsKKyAgVTMyVE84X0xFKCZtYWNbNF0sIGYxKTsKKyAgZjIgKz0gKGYxID4+IDMyKTsKKyAgVTMyVE84X0xFKCZtYWNbOF0sIGYyKTsKKyAgZjMgKz0gKGYyID4+IDMyKTsKKyAgVTMyVE84X0xFKCZtYWNbMTJdLCBmMyk7Cit9CmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL2V2cC9jX2FsbGMuYyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vZXZwL2NfYWxsYy5jCi0tLSBvcGVuc3NsLTEuMC4yai9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTYtMDktMjYgMDU6NDk6MDcuMDAwMDAwMDAwIC0wNDAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTYtMTEtMzAgMDk6NDI6MzEuMTUyMTU4OTM3IC0wNTAwCkBAIC0yMzgsNCArMjM4LDggQEAKICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCAiQ0FNRUxMSUEyNTYiKTsKICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCAiY2FtZWxsaWEyNTYiKTsKICNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fQ0hBQ0hBX1BPTFkKKyAgICBFVlBfYWRkX2NpcGhlcihFVlBfY2hhY2hhMjBfcG9seTEzMDUoKSk7CisjZW5kaWYKIH0KZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9jcnlwdG8vZXZwL2VfY2hhY2hhMjBfcG9seTEzMDUuYyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vZXZwL2VfY2hhY2hhMjBfcG9seTEzMDUuYwotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL2V2cC9lX2NoYWNoYTIwX3BvbHkxMzA1LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9ldnAvZV9jaGFjaGEyMF9wb2x5MTMwNS5jCTIwMTYtMTItMDEgMTA6MjY6MzkuMTU2NDg5NTAzIC0wNTAwCkBAIC0wLDAgKzEsMjUyIEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNpZm5kZWYgT1BFTlNTTF9OT19DSEFDSEFfUE9MWQorIyBpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorIyBpbmNsdWRlIDxvcGVuc3NsL2NoYWNoYTIwcG9seTEzMDUuaD4KKworI2RlZmluZSBGSUxMX0JVRkZFUiAoKHNpemVfdCkxMjgpCisKKyNkZWZpbmUgUE9MWTEzMDVfVEFHX0xFTiAxNgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDhfdCAgICAgICAga2V5WzMyXTsKKyAgICB1aW50OF90ICAgICAgICBpdlsxMl07CisgICAgdWludDhfdCAgICAgICAgbm9uY2VbMTJdOworICAgIHVpbnQ4X3QgICAgICAgIGFhZFtFVlBfQUVBRF9UTFMxX0FBRF9MRU5dOworICAgIHNpemVfdCAgICAgICAgIGFhZF9sOyAvLyBTaG91bGQgYWx3YXlzIGJlIEVWUF9BRUFEX1RMUzFfQUFEX0xFTgorICAgIHVuc2lnbmVkICAgICAgIHZhbGlkOjE7Cit9IEVWUF9DSEFDSEEyMF9QT0xZMTMwNV9DVFg7CisKK3N0YXRpYyBpbnQgRVZQX2NoYWNoYTIwX3BvbHkxMzA1X2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYykKK3sKKyAgICBFVlBfQ0hBQ0hBMjBfUE9MWTEzMDVfQ1RYICphZWFkX2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisgICAgbWVtY3B5KGFlYWRfY3R4LT5rZXksIGtleSwgMzIpOworICAgIG1lbWNweShhZWFkX2N0eC0+aXYsIGl2LCAxMik7CisgICAgbWVtY3B5KGFlYWRfY3R4LT5ub25jZSwgaXYsIDEyKTsKKyAgICBhZWFkX2N0eC0+dmFsaWQgPSAwOworICAgIHJldHVybiAxOworfQorCisKK3N0YXRpYyB2b2lkIHBvbHkxMzA1X3VwZGF0ZV9sZW5ndGgocG9seTEzMDVfc3RhdGUgKnBvbHkxMzA1LCBzaXplX3QgZGF0YV9sZW4pIHsKKyAgdWludDhfdCBsZW5ndGhfYnl0ZXNbOF07CisgIHVuc2lnbmVkIGk7CisKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZihsZW5ndGhfYnl0ZXMpOyBpKyspIHsKKyAgICBsZW5ndGhfYnl0ZXNbaV0gPSBkYXRhX2xlbjsKKyAgICBkYXRhX2xlbiA+Pj0gODsKKyAgfQorCisgIENSWVBUT19wb2x5MTMwNV91cGRhdGUocG9seTEzMDUsIGxlbmd0aF9ieXRlcywgc2l6ZW9mKGxlbmd0aF9ieXRlcykpOworfQorCit0eXBlZGVmIHZvaWQgKCphZWFkX3BvbHkxMzA1X3VwZGF0ZSkocG9seTEzMDVfc3RhdGUgKmN0eCwgY29uc3QgdWludDhfdCAqYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkX2xlbiwgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2lwaGVydGV4dF9sZW4pOworCisvKiBhZWFkX3BvbHkxMzA1IGZpbGxzIHx0YWd8IHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBmb3IgdGhlIGdpdmVuCisgKiBpbnB1dHMsIHVzaW5nIHx1cGRhdGV8IHRvIGNvbnRyb2wgdGhlIG9yZGVyIGFuZCBmb3JtYXQgdGhhdCB0aGUgaW5wdXRzIGFyZQorICogc2lnbmVkL2F1dGhlbnRpY2F0ZWQuICovCitzdGF0aWMgdm9pZCBhZWFkX3BvbHkxMzA1KGFlYWRfcG9seTEzMDVfdXBkYXRlIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0YWdbUE9MWTEzMDVfVEFHX0xFTl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9DSEFDSEEyMF9QT0xZMTMwNV9DVFggKmMyMF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qgbm9uY2VbMTJdLCBjb25zdCB1aW50OF90ICphZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkX2xlbiwgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNpcGhlcnRleHRfbGVuKSB7CisgIHVpbnQ4X3QgcG9seTEzMDVfa2V5WzMyXTsKKyAgbWVtc2V0KHBvbHkxMzA1X2tleSwgMCwgc2l6ZW9mKHBvbHkxMzA1X2tleSkpOworICBDUllQVE9fY2hhY2hhXzIwKHBvbHkxMzA1X2tleSwgcG9seTEzMDVfa2V5LCBzaXplb2YocG9seTEzMDVfa2V5KSwKKyAgICAgICAgICAgICAgICAgICBjMjBfY3R4LT5rZXksIG5vbmNlLCAwKTsKKyAgcG9seTEzMDVfc3RhdGUgY3R4OworICBDUllQVE9fcG9seTEzMDVfaW5pdCgmY3R4LCBwb2x5MTMwNV9rZXkpOworICB1cGRhdGUoJmN0eCwgYWQsIGFkX2xlbiwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9sZW4pOworICBDUllQVE9fcG9seTEzMDVfZmluaXNoKCZjdHgsIHRhZyk7Cit9CisKK3N0YXRpYyB2b2lkIHBvbHkxMzA1X3VwZGF0ZV9wYWRkZWRfMTYocG9seTEzMDVfc3RhdGUgKnBvbHkxMzA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pIHsKKyAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgcGFkZGluZ1sxNl0gPSB7IDAgfTsgLyogUGFkZGluZyBpcyBhbGwgemVyb3MuICovCisKKyAgQ1JZUFRPX3BvbHkxMzA1X3VwZGF0ZShwb2x5MTMwNSwgZGF0YSwgZGF0YV9sZW4pOworICBpZiAoZGF0YV9sZW4gJSAxNiAhPSAwKSB7CisgICAgQ1JZUFRPX3BvbHkxMzA1X3VwZGF0ZShwb2x5MTMwNSwgcGFkZGluZywgc2l6ZW9mKHBhZGRpbmcpIC0gKGRhdGFfbGVuICUgMTYpKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBwb2x5MTMwNV91cGRhdGUocG9seTEzMDVfc3RhdGUgKmN0eCwgY29uc3QgdWludDhfdCAqYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkX2xlbiwgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2lwaGVydGV4dF9sZW4pIHsKKyAgcG9seTEzMDVfdXBkYXRlX3BhZGRlZF8xNihjdHgsIGFkLCBhZF9sZW4pOworICBwb2x5MTMwNV91cGRhdGVfcGFkZGVkXzE2KGN0eCwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9sZW4pOworICBwb2x5MTMwNV91cGRhdGVfbGVuZ3RoKGN0eCwgYWRfbGVuKTsKKyAgcG9seTEzMDVfdXBkYXRlX2xlbmd0aChjdHgsIGNpcGhlcnRleHRfbGVuKTsKK30KKworc3RhdGljIGludCBFVlBfY2hhY2hhMjBfcG9seTEzMDVfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmwpCit7CisgICAgRVZQX0NIQUNIQTIwX1BPTFkxMzA1X0NUWCAqYWVhZF9jdHggPSBjdHgtPmNpcGhlcl9kYXRhOworICAgIGNvbnN0IHVpbnQ2NF90IGluX2xlbl82NCA9IGlubDsKKworICAgIGlmICghYWVhZF9jdHgtPnZhbGlkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbmwgPCBQT0xZMTMwNV9UQUdfTEVOKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoaW5fbGVuXzY0ID49IChVSU5UNjRfQygxKSA8PCAzMikgKiA2NCAtIDY0KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpbmwgLT0gUE9MWTEzMDVfVEFHX0xFTjsKKyAgICBpZiAoIWN0eC0+ZW5jcnlwdCkgeworICAgICAgICB1aW50OF90IHRhZ1tQT0xZMTMwNV9UQUdfTEVOXTsKKyAgICAgICAgYWVhZF9wb2x5MTMwNShwb2x5MTMwNV91cGRhdGUsIHRhZywgYWVhZF9jdHgsIGFlYWRfY3R4LT5ub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICBhZWFkX2N0eC0+YWFkLCBhZWFkX2N0eC0+YWFkX2wsIGluLCBpbmwpOworICAgICAgICBpZiAoQ1JZUFRPX21lbWNtcCh0YWcsIGluICsgaW5sLCBQT0xZMTMwNV9UQUdfTEVOKSAhPSAwKSB7CisgICAgICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sKTsKKyAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgQ1JZUFRPX2NoYWNoYV8yMChvdXQsIGluLCBpbmwsIGFlYWRfY3R4LT5rZXksIGFlYWRfY3R4LT5ub25jZSwgMSk7CisgICAgfQorCisKKyAgICBpZiAoY3R4LT5lbmNyeXB0KSB7CisgICAgICAgIENSWVBUT19jaGFjaGFfMjAob3V0LCBpbiwgaW5sLCBhZWFkX2N0eC0+a2V5LCBhZWFkX2N0eC0+bm9uY2UsIDEpOworICAgICAgICB1aW50OF90IHRhZ1tQT0xZMTMwNV9UQUdfTEVOXTsKKyAgICAgICAgYWVhZF9wb2x5MTMwNShwb2x5MTMwNV91cGRhdGUsIHRhZywgYWVhZF9jdHgsIGFlYWRfY3R4LT5ub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICBhZWFkX2N0eC0+YWFkLCBhZWFkX2N0eC0+YWFkX2wsIG91dCwgaW5sKTsKKworICAgICAgICBtZW1jcHkob3V0ICsgaW5sLCB0YWcsIFBPTFkxMzA1X1RBR19MRU4pOworICAgIH0KKworICAgIGFlYWRfY3R4LT52YWxpZCA9IDA7CisKKyAgICBpZiAoY3R4LT5lbmNyeXB0KSB7CisgICAgICAgIHJldHVybiBpbmwgKyBQT0xZMTMwNV9UQUdfTEVOOworICAgIH0gZWxzZSB7IC8qIERlY3J5cHRpb24gKi8KKyAgICAgICAgcmV0dXJuIGlubDsKKyAgICB9Cit9CisKKworc3RhdGljIGludCBFVlBfY2hhY2hhMjBfcG9seTEzMDVfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqY3R4KQoreworICAgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgRVZQX2NoYWNoYTIwX3BvbHkxMzA1X2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0cikKK3sKKyAgICBFVlBfQ0hBQ0hBMjBfUE9MWTEzMDVfQ1RYICphZWFkX2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRVZQX0NUUkxfQUVBRF9UTFMxX0FBRDoKKyAgICAgICAgICAgIC8qIFNhdmUgdGhlIEFBRCBmb3IgbGF0ZXIgdXNlICovCisgICAgICAgICAgICBpZiAoYXJnICE9IEVWUF9BRUFEX1RMUzFfQUFEX0xFTikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIG1lbWNweShhZWFkX2N0eC0+YWFkLCBwdHIsIGFyZyk7CisgICAgICAgICAgICBhZWFkX2N0eC0+YWFkX2wgPSBhcmc7CisgICAgICAgICAgICBtZW1jcHkoYWVhZF9jdHgtPm5vbmNlLCBhZWFkX2N0eC0+aXYsIHNpemVvZihhZWFkX2N0eC0+bm9uY2UpKTsKKyAgICAgICAgICAgIGludCB4b3JfaW5kZXg7CisgICAgICAgICAgICBmb3IoeG9yX2luZGV4PTA7IHhvcl9pbmRleCA8IDg7ICsreG9yX2luZGV4KSB7CisgICAgICAgICAgICAgIGFlYWRfY3R4LT5ub25jZVs0ICsgeG9yX2luZGV4XSBePSBhZWFkX2N0eC0+YWFkW3hvcl9pbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBJZiBkZWNyeXB0aW5nIGZpeCBsZW5ndGggZm9yIHRhZyAqLworICAgICAgICAgICAgaWYgKCFjdHgtPmVuY3J5cHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuID0gKGFlYWRfY3R4LT5hYWRbYXJnLTJdIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVhZF9jdHgtPmFhZFthcmctMV07CisgICAgICAgICAgICAgICAgbGVuIC09IFBPTFkxMzA1X1RBR19MRU47CisgICAgICAgICAgICAgICAgYWVhZF9jdHgtPmFhZFthcmctMl0gPSBsZW4gPj4gODsKKyAgICAgICAgICAgICAgICBhZWFkX2N0eC0+YWFkW2FyZy0xXSA9IGxlbiAmIDB4ZmY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZWFkX2N0eC0+dmFsaWQgPSAxOworICAgICAgICAgICAgcmV0dXJuIFBPTFkxMzA1X1RBR19MRU47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKKyNkZWZpbmUgQ1VTVE9NX0ZMQUdTICAgIChcCisgICAgICAgICAgRVZQX0NJUEhfQ1VTVE9NX0lWIHwgRVZQX0NJUEhfRkxBR19DVVNUT01fQ0lQSEVSIFwKKyAgICAgICAgfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUICBcCisgICAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0NPUFkpCisKKworc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgY2hhY2hhMjBfcG9seTEzMDUgPSB7CisgICAgTklEX2NoYWNoYTIwX3BvbHkxMzA1LAorICAgIDEsICAgIC8qIGJsb2NrIHNpemUsIHNvcnRhICovCisgICAgMzIsICAgLyoga2V5IGxlbiAqLworICAgIDEyLCAgIC8qIGl2IGxlbiAqLworICAgIENVU1RPTV9GTEFHU3xFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSLCAgICAvKiBmbGFncyAqLworICAgIEVWUF9jaGFjaGEyMF9wb2x5MTMwNV9pbml0LAorICAgIEVWUF9jaGFjaGEyMF9wb2x5MTMwNV9jaXBoZXIsCisgICAgRVZQX2NoYWNoYTIwX3BvbHkxMzA1X2NsZWFudXAsCisgICAgc2l6ZW9mKEVWUF9DSEFDSEEyMF9QT0xZMTMwNV9DVFgpLCAgICAgICAgIC8qIGN0eCBzaXplICovCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIEVWUF9jaGFjaGEyMF9wb2x5MTMwNV9jdHJsLAorICAgIE5VTEwKKyAgICB9OworCisKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9jaGFjaGEyMF9wb2x5MTMwNSh2b2lkKQoreyByZXR1cm4gJmNoYWNoYTIwX3BvbHkxMzA1OyB9CisjZW5kaWYKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9jcnlwdG8vZXZwL2V2cC5oIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9ldnAvZXZwLmgKLS0tIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9ldnAvZXZwLmgJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9ldnAvZXZwLmgJMjAxNi0xMS0zMCAwOTo0MzowMi42NzYwNzgxNzggLTA1MDAKQEAgLTkwMiw2ICs5MDIsMTAgQEAKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9zZWVkX29mYih2b2lkKTsKICMgZW5kaWYKIAorIyBpZm5kZWYgT1BFTlNTTF9OT19DSEFDSEFfUE9MWQorY29uc3QgRVZQX0NJUEhFUiAqRVZQX2NoYWNoYTIwX3BvbHkxMzA1KHZvaWQpOworIyBlbmRpZgorCiB2b2lkIE9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZih2b2lkKTsKIHZvaWQgT1BFTlNTTF9hZGRfYWxsX2FsZ29yaXRobXNfY29uZih2b2lkKTsKIApkaWZmIC1OYXVyIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9ldnAvTWFrZWZpbGUgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvY3J5cHRvL2V2cC9NYWtlZmlsZQotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL2V2cC9NYWtlZmlsZQkyMDE2LTA5LTI2IDA1OjQ5OjQxLjAwMDAwMDAwMCAtMDQwMAorKysgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvY3J5cHRvL2V2cC9NYWtlZmlsZQkyMDE2LTExLTMwIDA5OjQzOjIwLjg1NjAzMTYwNCAtMDUwMApAQCAtMjksNyArMjksOCBAQAogCWNfYWxsLmMgY19hbGxjLmMgY19hbGxkLmMgZXZwX2xpYi5jIGJpb19vay5jIFwKIAlldnBfcGtleS5jIGV2cF9wYmUuYyBwNV9jcnB0LmMgcDVfY3JwdDIuYyBcCiAJZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCi0JZV9hZXNfY2JjX2htYWNfc2hhMS5jIGVfYWVzX2NiY19obWFjX3NoYTI1Ni5jIGVfcmM0X2htYWNfbWQ1LmMKKwllX2Flc19jYmNfaG1hY19zaGExLmMgZV9hZXNfY2JjX2htYWNfc2hhMjU2LmMgZV9yYzRfaG1hY19tZDUuYyBcCisJZV9jaGFjaGEyMF9wb2x5MTMwNS5jCiAKIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF9rZXkubyBldnBfYWNuZi5vIGV2cF9jbmYubyBcCiAJZV9kZXMubyBlX2JmLm8gZV9pZGVhLm8gZV9kZXMzLm8gZV9jYW1lbGxpYS5vXApAQCAtNDIsNyArNDMsOCBAQAogCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwKIAlldnBfcGtleS5vIGV2cF9wYmUubyBwNV9jcnB0Lm8gcDVfY3JwdDIubyBcCiAJZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCi0JZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfYWVzX2NiY19obWFjX3NoYTI1Ni5vIGVfcmM0X2htYWNfbWQ1Lm8KKwllX2Flc19jYmNfaG1hY19zaGExLm8gZV9hZXNfY2JjX2htYWNfc2hhMjU2Lm8gZV9yYzRfaG1hY19tZDUubyBcCisJZV9jaGFjaGEyMF9wb2x5MTMwNS5vCiAKIFNSQz0gJChMSUJTUkMpCiAKQEAgLTc5MywzICs3OTUsNSBAQAogcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKIHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9hc24xL2FzbjFfbG9jbC5oIC4uL2NyeXB0bGliLmgKIHBtZXRoX2xpYi5vOiBldnBfbG9jbC5oIHBtZXRoX2xpYi5jCitlX2NoYWNoYTIwX3BvbHkxMzA1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jaGFjaGEyMHBvbHkxMzA1LmgKK2VfY2hhY2hhMjBfcG9seTEzMDUubzogZV9jaGFjaGEyMF9wb2x5MTMwNS5jCmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqX2RhdC5oIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9vYmplY3RzL29ial9kYXQuaAotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqX2RhdC5oCTIwMTYtMDktMjYgMDU6NDk6MzQuMDAwMDAwMDAwIC0wNDAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LmgJMjAxNi0xMS0zMCAxMTowNzowNC4yMDMzNDU5MTggLTA1MDAKQEAgLTYyLDkgKzYyLDkgQEAKICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCiAgKi8KIAotI2RlZmluZSBOVU1fTklEIDk1OAotI2RlZmluZSBOVU1fU04gOTUxCi0jZGVmaW5lIE5VTV9MTiA5NTEKKyNkZWZpbmUgTlVNX05JRCA5NTkKKyNkZWZpbmUgTlVNX1NOIDk1MgorI2RlZmluZSBOVU1fTE4gOTUyCiAjZGVmaW5lIE5VTV9PQkogODkwCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGx2YWx1ZXNbNjI1NV09ewpAQCAtMjUxNCw2ICsyNTE0LDcgQEAKIAlOSURfanVyaXNkaWN0aW9uU3RhdGVPclByb3ZpbmNlTmFtZSwxMSwmKGx2YWx1ZXNbNjIzMl0pLDB9LAogeyJqdXJpc2RpY3Rpb25DIiwianVyaXNkaWN0aW9uQ291bnRyeU5hbWUiLAogCU5JRF9qdXJpc2RpY3Rpb25Db3VudHJ5TmFtZSwxMSwmKGx2YWx1ZXNbNjI0M10pLDB9LAoreyJDSEFDSEEyMC1QT0xZMTMwNSIsImNoYWNoYTIwLXBvbHkxMzA1IixOSURfY2hhY2hhMjBfcG9seTEzMDUsMCxOVUxMLDB9LAogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzbl9vYmpzW05VTV9TTl09ewpAQCAtMjU3NCw2ICsyNTc1LDcgQEAKIDExMCwJLyogIkNBU1Q1LUNGQiIgKi8KIDEwOSwJLyogIkNBU1Q1LUVDQiIgKi8KIDExMSwJLyogIkNBU1Q1LU9GQiIgKi8KKzk1OCwJLyogIkNIQUNIQTIwLVBPTFkxMzA1IiAqLwogODk0LAkvKiAiQ01BQyIgKi8KIDEzLAkvKiAiQ04iICovCiAxNDEsCS8qICJDUkxSZWFzb24iICovCkBAIC0zNzI4LDYgKzM3MzAsNyBAQAogNjc3LAkvKiAiY2VydGljb20tYXJjIiAqLwogNTE3LAkvKiAiY2VydGlmaWNhdGUgZXh0ZW5zaW9ucyIgKi8KIDg4MywJLyogImNlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QiICovCis5NTgsCS8qICJjaGFjaGEyMC1wb2x5MTMwNSIgKi8KIDU0LAkvKiAiY2hhbGxlbmdlUGFzc3dvcmQiICovCiA0MDcsCS8qICJjaGFyYWN0ZXJpc3RpYy10d28tZmllbGQiICovCiAzOTUsCS8qICJjbGVhcmFuY2UiICovCmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqZWN0cy50eHQgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvY3J5cHRvL29iamVjdHMvb2JqZWN0cy50eHQKLS0tIG9wZW5zc2wtMS4wLjJqL2NyeXB0by9vYmplY3RzL29iamVjdHMudHh0CTIwMTYtMDktMjYgMDU6NDk6MDcuMDAwMDAwMDAwIC0wNDAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLnR4dAkyMDE2LTExLTMwIDA5OjQ0OjQ5LjE2NzgwNTM3NCAtMDUwMApAQCAtMTI5NCw2ICsxMjk0LDcgQEAKIAkJCTogQUVTLTEyOC1DQkMtSE1BQy1TSEEyNTYJOiBhZXMtMTI4LWNiYy1obWFjLXNoYTI1NgogCQkJOiBBRVMtMTkyLUNCQy1ITUFDLVNIQTI1Ngk6IGFlcy0xOTItY2JjLWhtYWMtc2hhMjU2CiAJCQk6IEFFUy0yNTYtQ0JDLUhNQUMtU0hBMjU2CTogYWVzLTI1Ni1jYmMtaG1hYy1zaGEyNTYKKyAgICAgICAgICAgIDogQ0hBQ0hBMjAtUE9MWTEzMDUgICAgICAgICA6IGNoYWNoYTIwLXBvbHkxMzA1CiAKIElTTy1VUyAxMDA0NiAyIDEJOiBkaHB1YmxpY251bWJlcgkJOiBYOS40MiBESAogCmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqX21hYy5oIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9vYmplY3RzL29ial9tYWMuaAotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqX21hYy5oCTIwMTYtMDktMjYgMDU6NDk6MzMuMDAwMDAwMDAwIC0wNDAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLmgJMjAxNi0xMS0zMCAwOTo0NDoyNy4xMjc4NjE4MzQgLTA1MDAKQEAgLTQwNDcsNiArNDA0NywxMCBAQAogI2RlZmluZSBMTl9hZXNfMjU2X2NiY19obWFjX3NoYTI1NiAgICAgICAgICAgICAgImFlcy0yNTYtY2JjLWhtYWMtc2hhMjU2IgogI2RlZmluZSBOSURfYWVzXzI1Nl9jYmNfaG1hY19zaGEyNTYgICAgICAgICAgICAgOTUwCiAKKyNkZWZpbmUgU05fY2hhY2hhMjBfcG9seTEzMDUgICAgICAgICAgICAiQ0hBQ0hBMjAtUE9MWTEzMDUiCisjZGVmaW5lIExOX2NoYWNoYTIwX3BvbHkxMzA1ICAgICAgICAgICAgImNoYWNoYTIwLXBvbHkxMzA1IgorI2RlZmluZSBOSURfY2hhY2hhMjBfcG9seTEzMDUgICAgICAgICAgIDk1OAorCiAjZGVmaW5lIFNOX2RocHVibGljbnVtYmVyICAgICAgICAgICAgICAgImRocHVibGljbnVtYmVyIgogI2RlZmluZSBMTl9kaHB1YmxpY251bWJlciAgICAgICAgICAgICAgICJYOS40MiBESCIKICNkZWZpbmUgTklEX2RocHVibGljbnVtYmVyICAgICAgICAgICAgICA5MjAKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLm51bSBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLm51bQotLS0gb3BlbnNzbC0xLjAuMmovY3J5cHRvL29iamVjdHMvb2JqX21hYy5udW0JMjAxNi0wOS0yNiAwNTo0OTozMi4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL2NyeXB0by9vYmplY3RzL29ial9tYWMubnVtCTIwMTYtMTEtMzAgMDk6NDQ6MzcuMTc1ODM2MDkzIC0wNTAwCkBAIC05NTUsMyArOTU1LDQgQEAKIGp1cmlzZGljdGlvbkxvY2FsaXR5TmFtZQkJOTU1CiBqdXJpc2RpY3Rpb25TdGF0ZU9yUHJvdmluY2VOYW1lCQk5NTYKIGp1cmlzZGljdGlvbkNvdW50cnlOYW1lCQk5NTcKK2NoYWNoYTIwX3BvbHkxMzA1CQk5NTgKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9NYWtlZmlsZS5vcmcgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvTWFrZWZpbGUub3JnCi0tLSBvcGVuc3NsLTEuMC4yai9NYWtlZmlsZS5vcmcJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL01ha2VmaWxlLm9yZwkyMDE2LTExLTMwIDEwOjE2OjA4LjQwMzAzODAyMCAtMDUwMApAQCAtMTAzLDYgKzEwMyw3IEBACiBDTUxMX0VOQz0KIE1PREVTX0FTTV9PQko9CiBFTkdJTkVTX0FTTV9PQko9CitDSEFQT0xZX0FTTT0KIFBFUkxBU01fU0NIRU1FPQogCiAjIEtSQjUgc3R1ZmYKQEAgLTE0OSw3ICsxNTAsNyBAQAogCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQgZXJyIFwKIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCisJY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYyBjaGFjaGEyMF9wb2x5MTMwNQogIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQogIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgogCkBAIC0yNDAsNiArMjQxLDcgQEAKIAkJRklQU0xJQkRJUj0nJHtGSVBTTElCRElSfScJCQlcCiAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKKwkJQ0hBUE9MWV9BU009JyQoQ0hBUE9MWV9BU00pJyBcCiAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxFPU1ha2VmaWxlIE1BS0VPVkVSUklERVM9CiAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgpkaWZmIC1OYXVyIG9wZW5zc2wtMS4wLjJqL3NzbC9zM19saWIuYyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9zc2wvczNfbGliLmMKLS0tIG9wZW5zc2wtMS4wLjJqL3NzbC9zM19saWIuYwkyMDE2LTA5LTI2IDA1OjQ5OjA3LjAwMDAwMDAwMCAtMDQwMAorKysgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvc3NsL3MzX2xpYi5jCTIwMTYtMTEtMzAgMDk6NDY6MDEuNzE1NjE5NTM1IC0wNTAwCkBAIC0yOTQ1LDYgKzI5NDUsNjUgQEAKICAgICAgMjU2fSwKICNlbmRpZgogCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19DSEFDSEFfUE9MWSkKKyAgICAvKiBSRkMgY2lwaGVycyAqLworICAgIHsKKyAgICAgMSwKKyAgICAgVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFNTTF9rRUNESEUsCisgICAgIFNTTF9hUlNBLAorICAgICBTU0xfQ0hBQ0hBMjBQT0xZMTMwNSwKKyAgICAgU1NMX0FFQUQsCisgICAgIFNTTF9UTFNWMV8yLAorICAgICBTU0xfSElHSCwKKyAgICAgU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2IHwgVExTMV9QUkZfU0hBMjU2LAorICAgICAyNTYsCisgICAgIDI1NiwKKyAgICAgfSwKKyAgICB7CisgICAgIDEsCisgICAgIFRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSwKKyAgICAgU1NMX2tFQ0RIRSwKKyAgICAgU1NMX2FFQ0RTQSwKKyAgICAgU1NMX0NIQUNIQTIwUE9MWTEzMDUsCisgICAgIFNTTF9BRUFELAorICAgICBTU0xfVExTVjFfMiwKKyAgICAgU1NMX0hJR0gsCisgICAgIFNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NiB8IFRMUzFfUFJGX1NIQTI1NiwKKyAgICAgMjU2LAorICAgICAyNTYsCisgICAgIH0sCisgICAgeworICAgICAxLAorICAgICBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1LAorICAgICBTU0xfa0RIRSwKKyAgICAgU1NMX2FSU0EsCisgICAgIFNTTF9DSEFDSEEyMFBPTFkxMzA1LAorICAgICBTU0xfQUVBRCwKKyAgICAgU1NMX1RMU1YxXzIsCisgICAgIFNTTF9ISUdILAorICAgICBTU0xfSEFORFNIQUtFX01BQ19TSEEyNTYgfCBUTFMxX1BSRl9TSEEyNTYsCisgICAgIDI1NiwKKyAgICAgMjU2LAorICAgICB9LAorICAgIHsKKyAgICAgMSwKKyAgICAgVExTMV9UWFRfUFNLX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFRMUzFfQ0tfUFNLX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUsCisgICAgIFNTTF9rUFNLLAorICAgICBTU0xfYVBTSywKKyAgICAgU1NMX0NIQUNIQTIwUE9MWTEzMDUsCisgICAgIFNTTF9BRUFELAorICAgICBTU0xfVExTVjFfMiwKKyAgICAgU1NMX0hJR0gsCisgICAgIFNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NiB8IFRMUzFfUFJGX1NIQTI1NiwKKyAgICAgMjU2LAorICAgICAyNTYsCisgICAgIH0sCisjZW5kaWYKIC8qIGVuZCBvZiBsaXN0ICovCiB9OwogCkBAIC00MDkwLDYgKzQxNDksNyBAQAogICAgIGludCBpLCBpaSwgb2s7CiAgICAgQ0VSVCAqY2VydDsKICAgICB1bnNpZ25lZCBsb25nIGFsZ19rLCBhbGdfYSwgbWFza19rLCBtYXNrX2EsIGVtYXNrX2ssIGVtYXNrX2E7CisgICAgaW50IHVzZV9jaGFjaGEgPSAwOwogCiAgICAgLyogTGV0J3Mgc2VlIHdoaWNoIGNpcGhlcnMgd2UgY2FuIHN1cHBvcnQgKi8KICAgICBjZXJ0ID0gcy0+Y2VydDsKQEAgLTQxMTksMTMgKzQxNzksMjAgQEAKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcDolc1xuIiwgKHZvaWQgKiljLCBjLT5uYW1lKTsKICAgICB9CiAjZW5kaWYKLQorcmV0cnk6CiAgICAgaWYgKHMtPm9wdGlvbnMgJiBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIHx8IHRsczFfc3VpdGViKHMpKSB7CiAgICAgICAgIHByaW8gPSBzcnZyOwogICAgICAgICBhbGxvdyA9IGNsbnQ7CisgICAgICAgIC8qIFVzZSBDaGFDaGEyMCtQb2x5MTMwNSBpZmYgaXQncyBjbGllbnQncyBtb3N0IHByZWZlcnJlZCBjaXBoZXIgc3VpdGUgKi8KKyAgICAgICAgaWYgKHNrX1NTTF9DSVBIRVJfbnVtKGNsbnQpID4gMCkgeworICAgICAgICAgICAgYyA9IHNrX1NTTF9DSVBIRVJfdmFsdWUoY2xudCwgMCk7CisgICAgICAgICAgICBpZiAoYy0+YWxnb3JpdGhtX2VuYyA9PSBTU0xfQ0hBQ0hBMjBQT0xZMTMwNSkKKyAgICAgICAgICAgICAgICB1c2VfY2hhY2hhID0gMTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHByaW8gPSBjbG50OwogICAgICAgICBhbGxvdyA9IHNydnI7CisgICAgICAgIHVzZV9jaGFjaGEgPSAxOwogICAgIH0KIAogICAgIHRsczFfc2V0X2NlcnRfdmFsaWRpdHkocyk7CkBAIC00MTM3LDYgKzQyMDQsMTAgQEAKICAgICAgICAgaWYgKChjLT5hbGdvcml0aG1fc3NsICYgU1NMX1RMU1YxXzIpICYmICFTU0xfVVNFX1RMUzFfMl9DSVBIRVJTKHMpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLyogU2tpcCBDaGFDaGEgdW5sZXNzIHRvcCBjbGllbnQgcHJpb3JpdHkgKi8KKyAgICAgICAgaWYgKGMtPmFsZ29yaXRobV9lbmMgPT0gU1NMX0NIQUNIQTIwUE9MWTEzMDUgJiYgIXVzZV9jaGFjaGEpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBzc2xfc2V0X2NlcnRfbWFza3MoY2VydCwgYyk7CiAgICAgICAgIG1hc2tfayA9IGNlcnQtPm1hc2tfazsKICAgICAgICAgbWFza19hID0gY2VydC0+bWFza19hOwpAQCAtNDIxNiw2ICs0Mjg3LDE0IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIGlmIChyZXQgPT0gTlVMTCAmJiAhdXNlX2NoYWNoYSkgeworICAgICAgICAvKiBJZiBubyBzaGFyZWQgY2lwaGVyIHdhcyBmb3VuZCBkdWUgdG8gc29tZSB1bnVzdWFsIHByZWZlcmVuY2VzLCB0cnkKKyAgICAgICAgICogYWdhaW4gd2l0aCBDSEFDSEEgZW5hYmxlZCBldmVuIGlmIG5vdCB0b3AgcHJpb3JpdHkgKi8KKyAgICAgICAgdXNlX2NoYWNoYSA9IDE7CisgICAgICAgIGdvdG8gcmV0cnk7CisgICAgfQorCiAgICAgcmV0dXJuIChyZXQpOwogfQogCmRpZmYgLU5hdXIgb3BlbnNzbC0xLjAuMmovc3NsL3NzbF9jaXBoLmMgb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvc3NsL3NzbF9jaXBoLmMKLS0tIG9wZW5zc2wtMS4wLjJqL3NzbC9zc2xfY2lwaC5jCTIwMTYtMDktMjYgMDU6NDk6MDcuMDAwMDAwMDAwIC0wNDAwCisrKyBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9zc2wvc3NsX2NpcGguYwkyMDE2LTExLTMwIDA5OjQ3OjA1LjA4NzQ1Nzg1NSAtMDUwMApAQCAtMTY0LDExICsxNjQsMTIgQEAKICNkZWZpbmUgU1NMX0VOQ19TRUVEX0lEWCAgICAgICAgMTEKICNkZWZpbmUgU1NMX0VOQ19BRVMxMjhHQ01fSURYICAgMTIKICNkZWZpbmUgU1NMX0VOQ19BRVMyNTZHQ01fSURYICAgMTMKLSNkZWZpbmUgU1NMX0VOQ19OVU1fSURYICAgICAgICAgMTQKKyNkZWZpbmUgU1NMX0VOQ19DSEFDSEEyMFBPTFkxMzA1X0lEWCAgICAgICAgMTQKKyNkZWZpbmUgU1NMX0VOQ19OVU1fSURYICAgICAgICAgMTUKIAogc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgKnNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX05VTV9JRFhdID0gewogICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKICNkZWZpbmUgU1NMX0NPTVBfTlVMTF9JRFggICAgICAgMApAQCAtMzE1LDYgKzMxNiw3IEBACiAgICAgezAsIFNTTF9UWFRfQ0FNRUxMSUEyNTYsIDAsIDAsIDAsIFNTTF9DQU1FTExJQTI1NiwgMCwgMCwgMCwgMCwgMCwgMH0sCiAgICAgezAsIFNTTF9UWFRfQ0FNRUxMSUEsIDAsIDAsIDAsIFNTTF9DQU1FTExJQTEyOCB8IFNTTF9DQU1FTExJQTI1NiwgMCwgMCwgMCwKICAgICAgMCwgMCwgMH0sCisgICAgezAsIFNTTF9UWFRfQ0hBQ0hBMjAsIDAsIDAsIDAsIFNTTF9DSEFDSEEyMFBPTFkxMzA1LCAwLCAwLCAwLCAwLCAwLCAwfSwKIAogICAgIC8qIE1BQyBhbGlhc2VzICovCiAgICAgezAsIFNTTF9UWFRfTUQ1LCAwLCAwLCAwLCAwLCBTU0xfTUQ1LCAwLCAwLCAwLCAwLCAwfSwKQEAgLTQzMSw2ICs0MzMsOSBAQAogICAgIHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzI1NkdDTV9JRFhdID0KICAgICAgICAgRVZQX2dldF9jaXBoZXJieW5hbWUoU05fYWVzXzI1Nl9nY20pOwogCisgICAgc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfQ0hBQ0hBMjBQT0xZMTMwNV9JRFhdID0KKyAgICAgICAgRVZQX2NoYWNoYTIwX3BvbHkxMzA1KCk7CisKICAgICBzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX01ENV9JRFhdID0gRVZQX2dldF9kaWdlc3RieW5hbWUoU05fbWQ1KTsKICAgICBzc2xfbWFjX3NlY3JldF9zaXplW1NTTF9NRF9NRDVfSURYXSA9CiAgICAgICAgIEVWUF9NRF9zaXplKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfTUQ1X0lEWF0pOwpAQCAtNTgxLDYgKzU4Niw5IEBACiAgICAgY2FzZSBTU0xfQUVTMjU2R0NNOgogICAgICAgICBpID0gU1NMX0VOQ19BRVMyNTZHQ01fSURYOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFNTTF9DSEFDSEEyMFBPTFkxMzA1OgorICAgICAgICBpID0gU1NMX0VOQ19DSEFDSEEyMFBPTFkxMzA1X0lEWDsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgaSA9IC0xOwogICAgICAgICBicmVhazsKQEAgLTgwNSw2ICs4MTMsOSBAQAogICAgICAgICAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfR09TVDg5X0lEWF0gPT0KICAgICAgICAgIE5VTEwpID8gU1NMX2VHT1NUMjgxNDc4OUNOVCA6IDA7CiAgICAgKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfU0VFRF9JRFhdID09IE5VTEwpID8gU1NMX1NFRUQgOiAwOworICAgICplbmMgfD0KKyAgICAgICAgKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0NIQUNIQTIwUE9MWTEzMDVfSURYXSA9PQorICAgICAgICAgTlVMTCkgPyBTU0xfQ0hBQ0hBMjBQT0xZMTMwNSA6IDA7CiAKICAgICAqbWFjIHw9IChzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX01ENV9JRFhdID09IE5VTEwpID8gU1NMX01ENSA6IDA7CiAgICAgKm1hYyB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9TSEExX0lEWF0gPT0gTlVMTCkgPyBTU0xfU0hBMSA6IDA7CkBAIC0xODI0LDYgKzE4MzUsOSBAQAogICAgIGNhc2UgU1NMX2VHT1NUMjgxNDc4OUNOVDoKICAgICAgICAgZW5jID0gIkdPU1Q4OSgyNTYpIjsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfQ0hBQ0hBMjBQT0xZMTMwNToKKyAgICAgICAgZW5jID0gIkNoYUNoYTIwLVBvbHkxMzA1IjsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgZW5jID0gInVua25vd24iOwogICAgICAgICBicmVhazsKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9zc2wvc3NsLmggb3BlbnNzbC0xLjAuMmotY2hhY2hhLWIvc3NsL3NzbC5oCi0tLSBvcGVuc3NsLTEuMC4yai9zc2wvc3NsLmgJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL3NzbC9zc2wuaAkyMDE2LTExLTMwIDA5OjQ2OjEyLjAxOTU5MzE0MiAtMDUwMApAQCAtMjk3LDYgKzI5Nyw3IEBACiAjIGRlZmluZSBTU0xfVFhUX0NBTUVMTElBMTI4ICAgICAiQ0FNRUxMSUExMjgiCiAjIGRlZmluZSBTU0xfVFhUX0NBTUVMTElBMjU2ICAgICAiQ0FNRUxMSUEyNTYiCiAjIGRlZmluZSBTU0xfVFhUX0NBTUVMTElBICAgICAgICAiQ0FNRUxMSUEiCisjIGRlZmluZSBTU0xfVFhUX0NIQUNIQTIwICAgICAgICAiQ0hBQ0hBMjAiCiAKICMgZGVmaW5lIFNTTF9UWFRfTUQ1ICAgICAgICAgICAgICJNRDUiCiAjIGRlZmluZSBTU0xfVFhUX1NIQTEgICAgICAgICAgICAiU0hBMSIKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9zc2wvc3NsX2xvY2wuaCBvcGVuc3NsLTEuMC4yai1jaGFjaGEtYi9zc2wvc3NsX2xvY2wuaAotLS0gb3BlbnNzbC0xLjAuMmovc3NsL3NzbF9sb2NsLmgJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL3NzbC9zc2xfbG9jbC5oCTIwMTYtMTEtMzAgMDk6NDc6MjEuMzI3NDE2NDUzIC0wNTAwCkBAIC0zNTQsNiArMzU0LDcgQEAKICMgZGVmaW5lIFNTTF9TRUVEICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBMCiAjIGRlZmluZSBTU0xfQUVTMTI4R0NNICAgICAgICAgICAweDAwMDAxMDAwTAogIyBkZWZpbmUgU1NMX0FFUzI1NkdDTSAgICAgICAgICAgMHgwMDAwMjAwMEwKKyMgZGVmaW5lIFNTTF9DSEFDSEEyMFBPTFkxMzA1ICAgIDB4MDAwODAwMDBMICAvKiBWYWx1ZSBmcm9tIG9wZW5zc2wgKi8KIAogIyBkZWZpbmUgU1NMX0FFUyAgICAgICAgICAgICAgICAgKFNTTF9BRVMxMjh8U1NMX0FFUzI1NnxTU0xfQUVTMTI4R0NNfFNTTF9BRVMyNTZHQ00pCiAjIGRlZmluZSBTU0xfQ0FNRUxMSUEgICAgICAgICAgICAoU1NMX0NBTUVMTElBMTI4fFNTTF9DQU1FTExJQTI1NikKZGlmZiAtTmF1ciBvcGVuc3NsLTEuMC4yai9zc2wvdGxzMS5oIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL3NzbC90bHMxLmgKLS0tIG9wZW5zc2wtMS4wLjJqL3NzbC90bHMxLmgJMjAxNi0wOS0yNiAwNTo0OTowNy4wMDAwMDAwMDAgLTA0MDAKKysrIG9wZW5zc2wtMS4wLjJqLWNoYWNoYS1iL3NzbC90bHMxLmgJMjAxNi0xMS0zMCAwOTo0Nzo0MC43NDMzNjY5NTAgLTA1MDAKQEAgLTU2Myw2ICs1NjMsMTUgQEAKICMgZGVmaW5lIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgIDB4MDMwMEMwMzEKICMgZGVmaW5lIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAgIDB4MDMwMEMwMzIKIAorLyogQ2hhQ2hhMjAtUG9seTEzMDUgY2lwaGVyc3VpdGVzIGZyb20gUkZDICovCisjIGRlZmluZSBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICAweDAzMDBDQ0E4CisjIGRlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUgICAgICAweDAzMDBDQ0E5CisjIGRlZmluZSBUTFMxX0NLX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSAgICAgICAgICAweDAzMDBDQ0FBCisjIGRlZmluZSBUTFMxX0NLX1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICAgICAgICAweDAzMDBDQ0FCCisjIGRlZmluZSBUTFMxX0NLX0VDREhFX1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICAweDAzMDBDQ0FDCisjIGRlZmluZSBUTFMxX0NLX0RIRV9QU0tfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSAgICAgICAgICAweDAzMDBDQ0FECisjIGRlZmluZSBUTFMxX0NLX1JTQV9QU0tfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSAgICAgICAgICAweDAzMDBDQ0FFCisKIC8qCiAgKiBYWFggKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFsZXJ0OiArICogT2xkZXIgdmVyc2lvbnMgb2YgT3BlblNTTCBnYXZlCiAgKiBzb21lIERIRSBjaXBoZXJzIG5hbWVzIHdpdGggIkVESCIgKyAqIGluc3RlYWQgb2YgIkRIRSIuICBHb2luZyBmb3J3YXJkLCB3ZQpAQCAtNzEzLDYgKzcyMiwxNSBAQAogIyBkZWZpbmUgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgIkVDREgtUlNBLUFFUzEyOC1HQ00tU0hBMjU2IgogIyBkZWZpbmUgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAgIkVDREgtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0IgogCisvKiBDaGFjaGEyMC1Qb2x5MTMwNSBjaXBoZXJzdWl0ZXMgZnJvbSBSRkMgKi8KKyMgZGVmaW5lIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICJFQ0RIRS1SU0EtQ0hBQ0hBMjAtUE9MWTEzMDUiCisjIGRlZmluZSBUTFMxX1RYVF9FQ0RIRV9FQ0RTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAiRUNESEUtRUNEU0EtQ0hBQ0hBMjAtUE9MWTEzMDUiCisjIGRlZmluZSBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUgICAgICAgICAiREhFLVJTQS1DSEFDSEEyMC1QT0xZMTMwNSIKKyMgZGVmaW5lIFRMUzFfVFhUX1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICAgICAgICJQU0stQ0hBQ0hBMjAtUE9MWTEzMDUiCisjIGRlZmluZSBUTFMxX1RYVF9FQ0RIRV9QU0tfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSAgICAgICAiRUNESEUtUFNLLUNIQUNIQTIwLVBPTFkxMzA1IgorIyBkZWZpbmUgVExTMV9UWFRfREhFX1BTS19XSVRIX0NIQUNIQTIwX1BPTFkxMzA1ICAgICAgICAgIkRIRS1QU0stQ0hBQ0hBMjAtUE9MWTEzMDUiCisjIGRlZmluZSBUTFMxX1RYVF9SU0FfUFNLX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUgICAgICAgICAiUlNBLVBTSy1DSEFDSEEyMC1QT0xZMTMwNSIKKwogIyBkZWZpbmUgVExTX0NUX1JTQV9TSUdOICAgICAgICAgICAgICAgICAxCiAjIGRlZmluZSBUTFNfQ1RfRFNTX1NJR04gICAgICAgICAgICAgICAgIDIKICMgZGVmaW5lIFRMU19DVF9SU0FfRklYRURfREggICAgICAgICAgICAgMwo=